如何基于枚举创建容器

时间:2013-01-29 12:52:45

标签: c++ stl enums containers

嗯,我设计了发布/子系列模式(它不是观察者模式!很多人都对此感到困惑)。我的问题是:

我的主题是:

  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

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

2 个答案:

答案 0 :(得分:1)

一种可能性是std::map<topics, std::vector<cEvent>>。但是,这可能有点过分,因为你只有3个枚举值,编号为0,1和2 ......

答案 1 :(得分:1)

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

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

topics<cSubscriber *> guiSubscribers;
topics<cEvent> guiEvents;