C ++中通用项目的容器需要帮助

时间:2010-09-25 18:14:56

标签: c++ visual-c++ templates generics

我想知道是否可以定义一个存储项目的通用C ++容器,如下所示:

template <typename T>
class Item{
typename T value;
}

我知道声明需要项目类型的定义,例如:

std::vector<Item <int> > items;

是否有可以解决此问题的模式设计或包装?

2 个答案:

答案 0 :(得分:1)

如果您需要一个可容纳任何类型元素的容器,请查看boost::any

在您当前的问题中,std::vector<Item <int> >std::vector<int>之间没有太大区别。

答案 1 :(得分:1)

对于9种类型,最佳镜头是使用boost::variant,与您获得的boost::any相比:

  • 类型安全(编译时检查)
  • 速度(类似于union,没有堆分配,没有typeid调用)

请使用:

typedef boost::variant<Type0, Type1, Type2, Type3, Type4,
                       Type5, Type6, Type7, Type8>        Item;

typedef std::vector<Item> ItemsVector;

要在boost::variant上调用操作,最好的方法是使用创建静态访问者,在documentation中阅读。