我有一个模板,它为类增加了一个特定的能力:
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)
我怎样才能投basePointer给SomeOtherClass在运行时?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)
任何想法为什么?
class Able : public ReceiverOfAbility, SomeOtherClass
Run Code Online (Sandbox Code Playgroud)
SomeOtherClass是一个私人基地Able<whatever>.为了dynamic_cast工作(即能够SomeOtherClass成功投射),它必须是一个公共基础.