以下のコードは、この問題を示しています。インターフェイス (C++ 仮想クラス) のみを使用して C++ コンポーネント用の API を作成しようとしています。Base および Derived クラスがあり、対応する IBase および IDerived インターフェイスがありますが、IBase を Derived にキャストしようとするとエラーが発生します。エラー C2594: '型キャスト': 'IBase *' から 'Derived *' へのあいまいな変換
私がやろうとしている Java や C# がまぶたを打たないのは合理的なことのようです。C++でこのようなことを達成する方法はありますか
class IBase
{
public :
virtual int method_A(void) = 0;
virtual int method_B(void) = 0;
virtual int method_C(void) = 0;
};
class IDerived : public IBase
{
public :
virtual int method_D(void) = 0;
};
class Base : public IBase
{
int method_A(void) {return 1;};
int method_B(void) {return 2;};
int method_C(void) {return 3;};
};
class Derived : public IDerived, private Base
{
public:
int method_D(void) {return 4;};
};
class HandleDerived
{
public :
int handle_base(IBase * i_base)
{
Derived * derived = (Derived *) i_base;
return derived->method_D();
}
};