私の意図はCBaseClass、とりわけ type の一部のメンバーへのコンテナーとして機能する基本クラスを持つことCBaseMemberです。CDerivedClass : public CBaseClass次に、を保持する a を導出します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()明らかな理由で未解決です) が、残念ながら、意図したとおりにコードを変更する方法がわかりません。
それらがどのように適切に行われるかを説明してください。または、私の問題に対する別の解決策を提案してください。
ありがとう!