所以我使用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
}
}
}发布于 2016-07-06 16:47:18
根据您的示例,您可以简单地显式调用基类实现:
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>类中添加应该使用哪个NewsPublisher<T>实现:
template <class NewsType> class NewsPublisher : public Publisher<OnlineFace> {
public:
// constructors, destructors...
using Publisher<OnlineFace>::publish(); // <<<<<<<<<<<<<
}https://stackoverflow.com/questions/38228832
复制相似问题