我目前正致力于在非 RTTI 平台 (Android) 上集成使用大量 RTTI 内容的第三方包。基本上,我做了自己的 RTTI 实现,但我遇到了一个问题。
问题是很多类都有菱形继承问题,因为所有类都派生自同一个基类(对象)。所以,如果我想从基类向下转换为派生类,我必须使用dynamic_cast - 但 RTTI 不可用!当有没有dynamic_cast的虚拟继承时,如何将对象从父对象转换为子对象?
它看起来像这样:
class A
{
public:
virtual char* func() { return "A"; };
};
class B : public virtual A
{
public:
//virtual char* func() { return "B"; };
};
class C : public virtual A
{
public:
//virtual char* func() { return "C"; };
};
class D : public B, public C
{
public:
//virtual char* func() { return "D"; };
};
D d;
A* pa = static_cast<A*>(&d);
D* pd = static_cast<D*>(pa); // can't do that! dynamic_cast does work though...
这些是我的错误:
错误 C2635:无法将“A*”转换为“D*”;隐含从虚拟基类的转换
错误 C2440:“正在初始化”:无法从“test_convert::A *”转换为“test_convert::D *”从基础转换为派生需要 dynamic_cast 或 static_cast
有任何想法吗?