我有一个模板,它为一个类添加了一个特定的能力:
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’
任何想法为什么?