我有一个设计问题,我不确定如何以最佳方式处理。我希望我的代码是面向未来的,并且仍然不会变得混乱和复杂(极客的困境)。
目前我的设计有以下设置
derived class D derived class E
^ ^
| |
derived abstract class B -> derived class C
^ ^
| |
Abstract Base class A
classB
与class 不同A
,classD
与 classE
不同,classB
与classC
不同A
。
由于这些类不同,我需要使用dynamic_cast
运算符。
A* a1 = new class C;
C* c1 = dynamics_cast<C*>(a1);
if(c1){ //Success!!!}
...
正如你所看到的,我会想要使用dynamic_cast
很多!我需要尝试找到一种很好的方法来做到这一点,而不是if()
额外的陈述。
有没有一种巧妙的方法来做到这一点?我似乎记得在 Scott Meyers 的书中看到过一些东西,但我离家一两个星期都无法访问它。
任何参考/示例将不胜感激。
另外,如果需要,我可以将类B
变成一个接口,这将是一种解决方案
B* d1 = new D;
B* e1 = new E;
但并不理想。
注意:我添加了这个例子来显示我当前的设计失败
class A {...};
class B: public A {
public:
virtual std::vector<objectType1*>& getObjectType1();
};
class C: public B {
private:
void newFunction();
};
A* c1 = new C();
std::vector<objectType1*> example = c1->getObjectType1(); // Wrong; need dyanmic_cast :-(
getObjectType1()
由于静态类型 A不dynamic_cast
知道此功能,因此无法访问。我需要重新考虑我的设计。有任何想法吗?