我的問題是有關的結構如下: 雙遺產:
抽象水平只是在這裏提供了「真正的」類(D1和D2)成員函數。由於需要高度優化,因此不存在虛擬性(抽象級別的析構函數受到保護)。在以下情況下,B0-C1-C2-D1是否完全可以正常工作:
B0,C1和C2具有不同名稱的成員函數嗎?
C1和C2具有相同名稱的功能(例如
myFunction
)?C1和C2和D1具有相同名稱的功能(例如
myFunction
)?B0和C2具有相同名稱但不包含C1的功能(例如
myFunction
)?
在每種情況下D1都會調用哪個版本的函數?
編輯:一個快速的代碼,以說明:
template<class CRTP> class A0
{
public:
void myfunction1();
protected:
~A0();
double mymember;
};
template<class CRTP> class B0 : public A0<CRTP>
{
public:
void myfunction2();
protected:
~B0();
};
template<class CRTP> class C1 : public B0<CRTP>
{
public:
void myfunction3();
protected:
~C1();
};
template<class CRTP> class C2 : public B0<CRTP>
{
public:
void myfunction4();
protected:
~C2();
};
class D1 : public C1<D1>, public C2<D1>
{
public:
void myfunction5();
};
你的照片中沒有'D0'。很明顯,其他人會被這樣的設計所困惑,但是看起來你甚至感到困惑! :-) –
謝謝。編輯:D0和D1 - > D1和D2 – Vincent
繪圖很好,但它不如代碼有用。特別是,似乎一直到'C'級別的只有帶CRTP的模板,對嗎? –