我想知道是否可以定义一个存储项目的通用C ++容器,如下所示:
template <typename T>
class Item{
typename T value;
}
我知道声明需要项目类型的定义,例如:
std::vector<Item <int> > items;
是否有可以解决此问题的模式设计或包装?
答案 0 :(得分:1)
如果您需要一个可容纳任何类型元素的容器,请查看boost::any
。
在您当前的问题中,std::vector<Item <int> >
和std::vector<int>
之间没有太大区别。
答案 1 :(得分:1)
对于9种类型,最佳镜头是使用boost::variant
,与您获得的boost::any
相比:
typeid
调用)请使用:
typedef boost::variant<Type0, Type1, Type2, Type3, Type4,
Type5, Type6, Type7, Type8> Item;
typedef std::vector<Item> ItemsVector;
要在boost::variant
上调用操作,最好的方法是使用创建静态访问者,在documentation中阅读。