gpt4 book ai didi

c++ - 如果不是抽象则调用基类方法

转载 作者:行者123 更新时间:2023-11-28 01:00:21 27 4
gpt4 key购买 nike

如果不是抽象的,如何调用基类方法。

class WithAbstMethod {
public:
virtual void do() = 0;
}

class WithImplMethod : public WithAbstMethod {
public:
virtual void do() {
// do something
}
}

template<typename BaseT>
class DerivedClass : BaseT {
public:
virtual void do() {
BaseT::do(); // here is a question. How to modify code, so that do() is called if it is not abstract?
// do something
}
}

void main() {
DerivedClass<WithAbstMethod> d1;
d1.do(); // only DerivedClass::do() should be called
DerivedClass<WithImplMethod> d2;
d2.do(); // both WithImplMethod::do() and DerivedClass::do() should be called
}

是否可以在编译时使用模板而不需要太多代码(使用 BaseT::do() 调用实例化 DerivedClass::do() 方法并且不依赖于 BaseT 类型)来做到这一点?显然,在 WithAbstMethod 类中提供实现不是一个选项。上面的代码是伪代码,因此可能包含一些小错误。

最佳答案

实际上,为 WithAbstMethod::do() 提供一个实现可能是一种选择。允许抽象函数有一个实现。

void WithAbstMethod::do()
{
// do nothing...
}

关于c++ - 如果不是抽象则调用基类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9088791/

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