如何在运行时搜索C++中的继承树?

Mar*_*dik 0 c++ inheritance

我有一个模板,它为类增加了一个特定的能力:

template <Class ReceiverOfAbility>
class Able : public ReceiverOfAbility, SomeOtherClass
{
...
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个标准的树状继承:

class Base
{};

class Derived1 : public Base
{};

class Derived2 : public Derived1
{};

...
Run Code Online (Sandbox Code Playgroud)

但是在树的某个地方有一个"向后的分支"

class Derived2WithAbility : public Able<Derived2>
{};
Run Code Online (Sandbox Code Playgroud)

假设我有:

 Base* basePointer = new DerivedWithAbility;
Run Code Online (Sandbox Code Playgroud)

我怎样才能投basePointerSomeOtherClass在运行时?dynamic_cast不起作用.问题是会有很多派生类,我不知道在树中哪个类继承了这个能力.我需要在树中搜索继承Able发生的地方.

有任何想法吗?

编辑:

我试过了

dynamic_cast<SomeOtherClass*>(dynamic_cast<Derived2WithAbility*>(basePointer))
Run Code Online (Sandbox Code Playgroud)

但我得到:

error: ‘SomeOtherClass’ is an inaccessible base of ‘Derived2WithAbility’
Run Code Online (Sandbox Code Playgroud)

任何想法为什么?

n. *_* m. 6

class Able : public ReceiverOfAbility, SomeOtherClass
Run Code Online (Sandbox Code Playgroud)

SomeOtherClass是一个私人基地Able<whatever>.为了dynamic_cast工作(即能够SomeOtherClass成功投射),它必须是一个公共基础.

  • @MartinDrozdik默认为类为private,public为结构. (2认同)