現在、非 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*' に変換できません。仮想基本クラスからの変換が暗示されています
error C2440: 'initializing' : 'test_convert::A *' から 'test_convert::D *' に変換できません ベースから派生へのキャストには、dynamic_cast または static_cast が必要です
何か案は?