0

コントローラー クラスにstd::map<int, std::shared_ptr<base>>m_items があります。

コントローラーは外部の消費者にアイテムを提供し、それらはベースのみを必要とするため、ポリモーフィズムはそのためにうまく機能します。ただし、特定のイベントが発生した場合、コントローラーは内部的に特定のタイプのアイテムを更新または削除する必要があります。更新は性質が大きく異なり、イベントごとに異なるデータ セットが必要になるため、基本クラスに一般的な「更新」メソッドを含めることはできません。必要なのは、イベントが発生したときに特定の派生型 (派生型ポインターにキャストする必要がある) のみを反復処理する方法です。1 つの解決策は、ベースに a を追加することですEDerivedType GetType()。各派生型は異なる列挙値を返すため、反復時に必要な型と比較できます。これは機能しますが、OO アプローチではありません。

誰でもこれを行うためのよりエレガントな方法を提案できますか?

ありがとう...

4

2 に答える 2

1

ビジターデザイン パターンが役に立つと思います。基本クラスにはaccept、ビジターを引数として取得する抽象があります。

すべてのオブジェクトにacceptは、更新を行うための正しいビジター関数を呼び出す があります。

于 2013-08-18T10:46:28.917 に答える
0

「必要なのは、イベントが発生したときに特定の派生型 (派生型ポインターにキャストする必要がある) のみを反復処理する方法です。」

を保持してstd::map< EDerivedType, Controlloer *>、対応するコントローラーを直接見つけることができます。さらに、Controller はポリモーフィズムの基本クラスである必要があります。

于 2013-08-18T12:39:29.640 に答える