我的 C++ 程序有一个非常特殊的情况。
查看以下类设置:
class Base1 {
public: void baseMethod();
}
class Base2 : public Base1 {
...
}
class Common {
public: void commonMethod();
}
class Derived1 : public Base1, public Common {
...
}
class Derived2 : public Base2, public Common {
...
}
Base1
并且Base2
对我来说是不变的,因为它们是图书馆的一部分。
我想要实现的是两者Derived1
共享Derived2
相同的方法commonMethod()
,所以我使用Common
具有该方法的类作为Derived1
and的公共基础Derived2
。
现在的问题是commonMethod()
应该包含一个baseMethod()
在Base1
! 在Derived1
- 或 -对象的上下文中,Derived2
这是合法的,但如何定义该方法Common
?
我知道,如果我将声明Base2
为虚拟派生类Base1
并且与 相同Common
,那应该不是问题(至少对于Derived2
,不确定Derived1
)。但是因为我无法修改Base2
,所以无论如何都是不可能的。
也让Common
继承 fromBase2
然后Derived1
和Derived2
完全 fromCommon
不起作用,因为我不想Derived1
继承 from Base2
!
然后我想到的是在里面做一个dynamic_cast commonMethod()
:
void Common::commonMethod() {
...
Base1* self = dynamic_cast<Base1*>(this);
if(self) {
self->baseMethod();
}
...
}
这似乎可行,但我不确定这是否是一个“不错”的解决方案......
你有什么想法可以让它变得更好吗?或者你认为这个解决方案一点也不差?:)