我的 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具有该方法的类作为Derived1and的公共基础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();
}
...
}
这似乎可行,但我不确定这是否是一个“不错”的解决方案......
你有什么想法可以让它变得更好吗?或者你认为这个解决方案一点也不差?:)