Предположим, у меня есть следующие классы:
class Base {
virtual void func() { cout << "func base" << endl; }
};
class A : virtual public Base {
public:
virtual void func() { cout << "func A" << endl; }
};
class B : virtual public Base {
public:
virtual void func() { cout << "func B" << endl; }
};
class C : public A, public B {
C(bool is_a);
public:
virtual void func() { // Call appropriate parent's func here }
};
Мое требование заключается в том, чтобы соответствующая функция родительского класса func()
вызывалась при вызове C func()
.Вот что я имею в виду под соответствующими:
Base* ptr = new C(true /*is_a*/);
ptr->func(); // This should call A's func internally
Как этого добиться?Это вообще возможно?
[править]
Это может быть скорее вопросом дизайна.Известно, что у класса C будет только один истинный родитель (либо A, либо B).И в зависимости от того, кто является родителем, я хочу, чтобы эта функция вызывалась.Любые альтернативные предложения дизайна приветствуются.
Я извлекаю C из A и B, потому что есть некоторые общие функции, которые совместно используются в A и B и которые не могут быть частью базового класса.