상속 문제가 발생했습니다. 내 솔루션이 우아한 지 모르겠습니다. 이 클래스가 있습니다클래스 멤버 변수를 오버라이드
class Var
{
public:
virtual void doSomething();
}
class DerivedVar : public Var
{
public:
virtual void doSomething();
void doSomethingElse();
}
또한 MyBase를 상속 한 MyDerived도 있습니다. MyBase에는 Var 유형의 멤버가 있지만 MyDerived에는 DerivedVar 멤버가 있어야하므로 doSomething()을 호출 할 수 있습니다. 현재, 나는이 작업을 수행 할 수있는 더 좋은 방법이 있는지 알고 싶어이 문제를
template<typename VarType>
class MyBase
{
protected:
VarType var;
public:
MyBase() { var.doSomething(); }
}
class MyDerived : public MyBase<DerivedVar>
{
public:
MyDerived() : MyBase() { var.doSomethingElse(); }
}
를 해결하기 위해 템플릿을 사용하고 있습니다 (예. 템플릿 사용의 필요없이) 당신이 원하는 또는 필요한 경우
잘 모르는 경우 CRTP에 대한 정보를 찾을 수 있습니다. – chris
음 ... 힙에 간접 지정 및 할당 수준을 추가 할 필요가 없다면 항상 포인터를 저장할 수 있습니다 ... – StoryTeller