基于条件重写C++函数

Overriding C++ function based on conditional

本文关键字:重写 C++ 函数 条件 于条件      更新时间:2023-10-16

所以我已经使用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(); // <<<<<<<<<<<<<
}