У меня есть сценарий множественного наследования без виртуальных базовых классов:
Ta Tb
| |
B C
\ /
A
Ta и Tb - это два разных класса шаблонов, которые объявляют виртуальную функцию с именем f(). Я хочу переопределить две функции в области A, потому что мне приходится взаимодействовать с данными B и C в этих методах. Но я не знаю, как это сделать.
class Tb {
protected:
virtual void f() {};
public:
void call() {
this->f();
};
};
class Tc {
protected:
virtual void f() {};
public:
void call() {
this->f();
};
};
class B : public Tb {
public:
void doSomething() {};
};
class C : public Tc {
private:
int c;
public:
void inc() { c++; };
};
class A : public B, public C {
protected:
void f() { // this is legal but I don't want to override both with the same definition.
// code here
}
// if Tb::f() is called then i want to call C::inc()
// if Tc::f() is called then i want to call B::doSomething()
public:
void call() {
B::call();
C::call();
};
};
Есть ли синтаксис для переопределения обоих методов с разными определениями или я должен определить их в B и C?
Спасибо
Изменить: Моя проблема заключается не в том, что вызов can not Tb:: f() или Tc:: f(), но я хочу определить два разных поведения, если вызывается Tb:: f() или Tc:: f(). Эти методы называются самими Tb и Tc в собственных публичных методах. Модифицированный пример, поэтому, возможно, более ясно, что я хочу сделать...