Old : CRTP 기본 클래스를 통해 가상 함수를 재정의하려면 어떻게해야합니까? CRTP 기본 클래스를 통한 가상 함수 재정의
struct I { virtual void foo() = 0; };
template<class D>
struct B { void foo() { } }; // provides implementation of foo in D
struct D : I, B<D> { }; // D has an implementation of foo that should override I
int main() { D d; }
Error: unimplemented pure virtual method 'foo' in 'D'
간단한
: 어떻게 파생 유형을 재 구현하지 않고 가상 함수를 재정의 할 수 있습니까? (나는이 질문이 가상 함수의 정의에 어긋난다 고 생각한다).struct I { virtual void foo() = 0; };
struct B { void foo() { } };
struct D : B, I { };
int main() { D d; }
수'B' 상속을 '나'? – aschepler
아니요. 'B'는 'I'가 아닙니다. 'B'는'I' 인터페이스의 일부를 구현할 수 있지만 전부는 아닙니다. – gnzlbg
뭔가가 I에서 상속 받아 foo를 구현해야합니다. 한 가지 가능성은 D가이를 수행하여 B로 전달하는 것입니다. 또는 B에 다른 템플리트 매개 변수를 추가하고 거기에서 B를 상속받을 수 있습니다. 셀 수없는 가능성이 있습니다. 단 하나만 있으면됩니다. 무엇인가는 I로부터 상속 받아 구현해야합니다. – PlasmaHH