我的意图是有一些基类CBaseClass,除其他外,用作某些类型成员的容器CBaseMember;然后得出一个CDerivedClass : public CBaseClass成立CDerivedMember : public CBaseMember。
我不能使用一个指针并用一个对象CBaseMember初始化它,因为它是一种多重继承情况,有一个与实现无关但需要对. 很多肮脏的铸造是我非常想避免的。CDerivedMemberCDerivedClassCDerivedMemberCBaseClassCDerivedClass
我对这个问题的解决方案是制作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()由于显而易见的原因尚未解决),但不幸的是我不知道如何更改我的代码以表示我想要它的意思。
谁能解释这些事情是如何正确完成的 - 或者为我的问题提出另一种解决方案?
谢谢!