クラスに特定の機能を追加するテンプレートがあります。
template <Class ReceiverOfAbility>
class Able : public ReceiverOfAbility, SomeOtherClass
{
...
}
次に、標準的なツリーのような継承があります。
class Base
{};
class Derived1 : public Base
{};
class Derived2 : public Derived1
{};
...
しかし、木のどこかに「後方分岐」があります
class Derived2WithAbility : public Able<Derived2>
{};
私が持っているとしましょう:
Base* basePointer = new DerivedWithAbility;
basePointer
実行時にどのようにキャストできSomeOtherClass
ますか?dynamic_cast
動作しません。問題は、派生クラスがたくさんあることであり、ツリーのどこでクラスが機能を継承するのかがわかりません。継承が発生する場所をツリーで検索する必要がありAble
ます。
何か案は?
編集:
私がしようとしました
dynamic_cast<SomeOtherClass*>(dynamic_cast<Derived2WithAbility*>(basePointer))
しかし、私は得ます:
error: ‘SomeOtherClass’ is an inaccessible base of ‘Derived2WithAbility’
なぜアイデアはありますか?