0

さて、私はパブリッシュ/サブスクライブ パターンを設計しています (これはオブザーバー パターンではありません! 多くの人がこれを混同しています)。私の問題は次のとおりです。

トピックの列挙があります:

  enum topics {gui, combat, physics};

次に、トピックごとに 2 つのコンテナーが必要です。現在、私はそれを手動で行っています:

  std::vector <cSubscriber *> guiSubscribers;
  std::vector <cEvent> guiEvents;

私がやりたいのは、列挙型をキーとして使用するベクターのコンテナーを持つことです。つまり、次の方法でアクセスできます。

events[gui] //it gives me access to vector of gui events
subscribers[combat] //this gives me access to vector of combat subscribers

[] のキーは、列挙型の値でなければなりません。これを行う方法はありますか、またはトピックごとに手動で行う必要がありますか?

4

2 に答える 2

1

要素の数が事前にわかっている場合、ベクトルを使用する必要が本当にありますか?そのような解決策はどうですか?

template<class T> struct topics {
    T gui, combat, physics
};

topics<cSubscriber *> guiSubscribers;
topics<cEvent> guiEvents;
于 2013-01-29T13:18:53.457 に答える
1

1 つの可能性はstd::map<topics, std::vector<cEvent>>. ただし、0、1、および 2 の番号が付けられる 3 つの列挙値しかないことを考えると、これはやり過ぎになる可能性があります。

于 2013-01-29T12:54:13.563 に答える