내 질문은 다음과 같은 구조에 관련이 있습니다 더블 상속 :
추상 수준이 "진짜"클래스 (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가있는 템플릿 만있는 것 같습니다. 맞습니까? –