我的意图是有一些基类CBaseClass
,除其他外,用作某些类型成员的容器CBaseMember
;然后得出一个CDerivedClass : public CBaseClass
成立CDerivedMember : public CBaseMember
。
我不能使用一个指针并用一个对象CBaseMember
初始化它,因为它是一种多重继承情况,有一个与实现无关但需要对. 很多肮脏的铸造是我非常想避免的。CDerivedMember
CDerivedClass
CDerivedMember
CBaseClass
CDerivedClass
我对这个问题的解决方案是制作CBaseClass
一个模板,如下所示:
//declaration
template <class Member>
CBaseClass
{
protected:
virtual void GenericMethod();
virtual void VirtualMethod() = 0;
Member* member;
};
//definition
template <class Member>
void CBaseClass<Member>::GenericMethod()
{
member->SomeMemberMethod();
}
然后CDerivedClass
从它继承,像这样:
//declaration
CDerivedClass : public CBaseClass<CDerivedMember>
{
protected:
virtual void VirtualMethod();
};
//definition
void CDerivedClass::VirtualMethod()
{
member->SomeDerivedMethod();
}
可以预见的是,这不起作用(CBaseClass<CDerivedMember>::GenericMethod()
由于显而易见的原因尚未解决),但不幸的是我不知道如何更改我的代码以表示我想要它的意思。
谁能解释这些事情是如何正确完成的 - 或者为我的问题提出另一种解决方案?
谢谢!