Как вызвать метод базового класса, если он не является абстрактным.
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
}
Возможно ли это сделать с помощью шаблонов во время компиляции без большого количества кода (создать экземпляр метода DerivedClass :: do () с BaseT:: do () и без зависимости от типа BaseT?Очевидно, обеспечить реализацию в классе WithAbstMethod не вариант.Код выше является псевдокодом, поэтому может содержать незначительные ошибки.