首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于条件的重写C++函数

基于条件的重写C++函数
EN

Stack Overflow用户
提问于 2016-07-06 16:17:18
回答 1查看 1.4K关注 0票数 1

所以我使用C和Java已经很长时间了,但是我对C++不太熟悉。目前的情况是:

base class template 1 -> base class template 2 -> several relevant subclasses

目前,所有的最终子类都继承了类1中的成员函数,但是我们只需要在其中一个子类中更改该函数的行为,并且只有在代码中的其他地方设置了变量时,才需要这样做,否则就可以按照类1中的定义运行函数。是否有一种方法可以做到这一点而不将整个函数定义放在if-else的另一端?我看过SFINAE/enable-if,但这是用于基于类型的决策,而不是像这样简单的条件。

如果我错过了任何简单或愚蠢的事情请告诉我。

一些伪码可能会有所帮助:

代码语言:javascript
复制
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
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-06 16:47:18

根据您的示例,您可以简单地显式调用基类实现:

代码语言:javascript
复制
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>实现:

代码语言:javascript
复制
template <class NewsType> class NewsPublisher : public Publisher<OnlineFace> {
public:
  // constructors, destructors...
  using Publisher<OnlineFace>::publish(); // <<<<<<<<<<<<<
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38228832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档