如何基于枚举创建容器

How to create containers based on enum

本文关键字:创建 枚举 何基于      更新时间:2023-10-16

好吧,我正在设计发布/订阅模式(这不是观察者模式!许多人混淆了这一点)。我的问题是:

我有主题枚举:

  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

[] 中的键必须是枚举中的值。有没有办法做到这一点,或者我需要为每个主题手动执行此操作?

如果事先知道元素的数量,真的有必要使用向量吗?这样的解决方案怎么样:

template<class T> struct topics {
    T gui, combat, physics
};
topics<cSubscriber *> guiSubscribers;
topics<cEvent> guiEvents;

一种可能性是std::map<topics, std::vector<cEvent>>。 但是,鉴于您只有 3 个枚举值,这些枚举值将被编号为 0、1 和 2,这可能是矫枉过正......