【发布时间】:2013-02-26 10:02:24
【问题描述】:
下面的代码说明了这个问题。我正在尝试为仅使用接口(C++ 虚拟类)的 C++ 组件创建 API。我有一个 Base 和 Derived 类,并且有相应的 IBase 和 IDerived 接口,但是当我尝试将 IBase 强制转换为 Derived 时,这会导致错误。 错误 C2594: 'type cast' : 从 '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();
}
};
【问题讨论】:
-
使用虚拟继承
-
...并且不要使用 C 风格的演员表。 ;-)