gpt4 book ai didi

c++ - 基于条件覆盖 C++ 函数

转载 作者:行者123 更新时间:2023-11-30 01:43:09 25 4
gpt4 key购买 nike

所以我用了很长时间的 C 和 Java,但我对 C++ 不是很熟悉。情况是我们有:

基类模板1 -> 基类模板2 -> 几个相关的子类

目前所有的 final 子类都继承了类 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成员(member)。


此外,由于您的示例只是伪代码,我无法真正测试它,您可能需要添加 which publish()应在 NewsPublisher<T> 中使用实现类:

template <class NewsType> class NewsPublisher : public Publisher<OnlineFace> {
public:
// constructors, destructors...
using Publisher<OnlineFace>::publish(); // <<<<<<<<<<<<<
}

关于c++ - 基于条件覆盖 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38228832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com