-1
我定义我的项目中包含以下接口:C++向下转换与虚基类
class iA
class iB : virtual public iA
class iC : virtual public iA
当我现在实现接口..
class A : virtual public iA
class B : virtual public iB, public A
class C : virtual public iC, public A
由于虚拟的,我不受钻石继承问题困扰。但现在,我想一个指针的iA向下转换成A型
void func1(iA* a){
static_cast<A*>(a);
}
这是不可能的,因为虚拟继承iA
。我可以在类A
删除virtual
关键字,但那么我会遭受钻石继承问题。 我知道我可以用dynamic_cast
投iA
到A
,但我真的不想这样做。
我必须用这种方式施放的情况如下: 接口iA定义了一个函数doSomething(iA* a)
。我在类A
中实现了这个功能。在函数内部,我需要A
(它们不是iA
的成员)的一些成员,所以我必须将iA*
a投射到A*
。由于我知道iA*
是A
类型的对象,因为使用的实现中存在A
,B
和C
(否则,函数doSomething()
将永远不会在类A
中调用),因此此演员表很安全。
这是一个糟糕的设计?我如何改进此设计以避免需要dynamic_cast
?
问候
很难说如何在不知道细节的情况下改进设计。它可能需要重新设计。 –
这对我来说确实看起来很糟糕。如果不知道你想要达到什么目的,那么无法说出一个好的设计。 –