0

私はこのようなものを持っています:

class A {
    void add (A* a) {
        //add a to a vector<A*>
    }
    virtual void draw() = 0;
}

class B : public A {
    void tick() {}
    void draw() {}
}

class C : public A {
    void draw() {}
}

今私がやりたいことは、次のようなループを持つことです:

for(int i=0; i<vector.size(); i++) {
    vector[i]->tick();
}

問題は、このベクトルのすべての要素にメソッドがあるわけではないということですが、ベクトルをループしてすべての要素tick()を呼び出すこともできるようにしたいので、同じベクトルにそれらを持ちたいと思っています。draw()これを解決する方法はありますか?別のベクトルを持つことを検討していますが、むしろしたくありません。

4

2 に答える 2

5

vectorいくつかのウィジェットがあり、それらのウィジェットの一部だけが絵文字を持っている場合、それらは本当にすべてのウィジェットですか?

あなたの場合vector、同じではないものがあります。これはあなたの問題です。確かに、戦艦を鉛筆のカップに入れるためのハッキーで複雑なメカニズムを考え出すことはできます。または、私が正しいことの 1 つであると考えていることを行うこともできます。

  1. 鉛筆カップに入れるものはすべて鉛筆であることを確認してください
  2. 戦艦を配置する別の場所を作成します。

上記の2番は、すでに述べたように別のベクトルを作成しています。virtual tick()番号 1 は、基本クラスに空の (自明な) 実装を持つメソッドを提供するのと同じくらい単純かもしれません。

于 2012-12-11T13:41:51.037 に答える
0

この場合、ビジターパターンを使用できると思います。しかし、それは最善の解決策ではありません。リスコフの置換原則にブレーキをかけます。階層を再考してください。

于 2012-12-11T13:39:16.037 に答える