基于条件重写C++函数
Overriding C++ function based on conditional
所以我已经使用C和Java很长时间了,但我对C++并不熟悉。情况是,我们有:
base class template 1 -> base class template 2 -> several relevant subclasses
目前,所有最终的子类都继承了类 1 的成员函数,但我们只需要在其中一个子类中更改此函数的行为,并且只有在代码中其他位置设置了变量时,然后按照类 1 中的定义运行函数。有没有办法在不将整个函数定义插入if-else
的另一侧的情况下做到这一点?我已经看过 SFINAE/enable-if,但它用于基于类型的决策,而不是像这样的简单条件。
如果我错过了任何简单或愚蠢的东西,请告诉我。
一些伪代码可能会有所帮助:
template <class Face> class Publisher {
virtual void publish(...) {
// do stuff
}
}
template <class NewsType> class NewsPublisher : public Publisher<OnlineFace> {
// constructors, destructors...
}
class MagazinePublisher : public NewsPublisher<Sports> {
void publish(...) {
if(that.theOther() == value) {
// do different stuff
} else {
// do whatever would have been done without this override here
}
}
}
根据您的示例,您可以简单地显式调用基类实现:
class MagazinePublisher : public NewsPublisher<Sports> {
void publish(...) {
if(that.theOther() == value) {
// do different stuff
} else {
// call the base class implementation, as this function would not
// have been overridden:
NewsPublisher<Sports>::publish(...);
// ^^^^^^^^^^^^^^^^^^^^^^^
}
}
}
好吧,我想您的实际基类函数publish()
被声明为virtual
成员。
另外,由于您的示例只是伪代码,我无法真正测试它,因此您可能需要添加应在NewsPublisher<T>
类中使用哪个publish()
实现:
template <class NewsType> class NewsPublisher : public Publisher<OnlineFace> {
public:
// constructors, destructors...
using Publisher<OnlineFace>::publish(); // <<<<<<<<<<<<<
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- 在 C++ 中用派生类型重写成员函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 方法重写线程C++中的概念
- 为重写std::exception的库生成swig接口时出错
- 如何强制从重写方法调用重写的方法基方法?
- 用于C++的静态二进制检测或二进制重写工具和框架
- 如何将 if else 语句重写为 switch 语句
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 用 C 重写C++类
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 重写虚拟函数和继承
- C++调用使用重写函数的父类函数
- 重写打印函数而不是覆盖基类
- 不允许在类定义之外重写
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- C++:从抽象类重写纯虚拟运算符重载
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 重写函数不打印基类数据