最善の方法で処理する方法がわからないという設計上の問題があります。私は自分のコードが将来の証明であることを望んでいます。
現在、私のデザインには次の設定があります
derived class D derived class E
^ ^
| |
derived abstract class B -> derived class C
^ ^
| |
Abstract Base class A
クラスB
はクラスと異なりA
、クラスD
とクラスはクラスと異なりE
、クラスとは異なります。B
C
A
これらのクラスは異なるため、dynamic_cast
演算子を使用する必要があります。
A* a1 = new class C;
C* c1 = dynamics_cast<C*>(a1);
if(c1){ //Success!!!}
...
dynamic_cast
見ての通り、たくさん使いたくなる!if()
余分なステートメントでいっぱいではない、これを行うための良い方法を見つけようとする必要があります。
これを行うきちんとした方法はありますか?Scott Meyers の本で何かを見た覚えがあるようですが、私は家を離れており、1、2 週間アクセスできません。
参考文献/例は大歓迎です。
また、必要に応じて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 :-(
静的型 A はこの関数を知らないため、getObjectType1()
アクセスすることはできません。dynamic_cast
設計を再考する必要があります。何か案は?