如果它不是抽象的话,如何调用基类方法。
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类中提供实现不是一个选项。上面的代码是伪代码,因此可能包含小错误。
答案 0 :(得分:3)
实际上,为WithAbstMethod::do()
提供实施可能是一种选择。允许抽象函数具有实现。
void WithAbstMethod::do()
{
// do nothing...
}