У меня есть иерархия, которая выглядит примерно так:
class Base
{
public:
void Execute();
virtual void DoSomething() = 0;
private:
virtual void exec_();
};
class Derived : public Base
{
public:
//DoSomething is implementation specific for classes Derived from Base
void DoSomething();
private:
void exec_();
};
void Base::Execute()
{
// do some work
exec_(); //work specific for derived impl
// do some other work
}
void Derived::DoSomething()
{
//impl dependent so it can only be virtual in Base
}
int main()
{
Derived d;
Base& b = d;
b.Execute(); //linker error cause Derived has no Execute() function??
}
Таким образом, вопрос заключается в том, как мне вызвать Execute (), используя этот шаблон, когда я создаю производную, используя мой базовый класс. В моем случае я не хочу создавать Derived напрямую, поскольку у меня есть несколько классов, производных от Base, и в зависимости от некоторых условий я должен выбрать другой производный класс.
Может кто-нибудь помочь?