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

标签 c++ templates abstract

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

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/

相关文章:

java - 扩展抽象构造函数?

java - 抽象父类(super class)的子类的方法可以返回父类(super class)返回类型的父类(super class)吗?

c++ - 重载解析、定义函数和模板的顺序

c++ - 错误 : unqualified ID

c++ - std::put_time() 的问题

javascript - 如何将字典从 Jinja2(使用 Python)传递给 Javascript?

java - 解码为抽象元素列表

c++ - 具有虚函数的未解析外部符号

c++ - std::function 模板参数中的 const

templates - 为什么在 play 2 scala 模板中构造的 html 会生成空的 Html 案例类