У меня есть сценарий множественного наследования без виртуальных базовых классов, подобный этому:
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?
Спасибо
Edit:
Моя проблема не в том, что нельзя вызывать Tb :: f () или Tc :: f (), а в том, что я хочу определить два разных поведения, если вызывается Tb :: f () или Tc :: f (). Эти методы вызываются Tb и самим Tc в своих открытых методах.
Модифицированный пример, так что, может быть, более понятно, что я хочу сделать ...