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