私はクラスに固有の機能を追加したテンプレート、持っている:実行時にC++で継承ツリーを検索するにはどうすればよいですか?
class Base
{};
class Derived1 : public Base
{};
class Derived2 : public Derived1
{};
...
しかし、どこかでツリー内の「後方がある:それから私は、標準的なツリー状の継承を持って
template <Class ReceiverOfAbility>
class Able : public ReceiverOfAbility, SomeOtherClass
{
...
}
をブランチ」
class Derived2WithAbility : public Able<Derived2>
{};
は私が持っていると仮定します。
Base* basePointer = new DerivedWithAbility;
実行時にbasePointer
をSomeOtherClass
にキャストするにはどうすればよいですか? dynamic_cast
は機能しません。問題は、多くの派生クラスが存在することであり、ツリー内でクラスがその能力を継承するフォワードにはわからないということです。 Able
からの継承が発生した場所をツリー内で検索する必要があります。
アイデア?
EDIT:
私は
dynamic_cast<SomeOtherClass*>(dynamic_cast<Derived2WithAbility*>(basePointer))
しようとしましたが、私が手:
error: ‘SomeOtherClass’ is an inaccessible base of ‘Derived2WithAbility’
任意のアイデアなぜですか?
テンプレートはコンパイル時の構造です。具体化のためのコードを検索する方が理にかなっています。 – AJG85