我想知道是否可以定义一个通用的 C++ 容器来存储如下项目:
template <typename T>
class Item{
typename T value;
}
我知道声明需要项目类型的定义,例如:
std::vector<Item <int> > items;
是否有任何模式设计或包装器可以解决此问题?
最佳答案
对于 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 中的相关内容.
关于c++ - C++ 中通用项目的容器需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3794945/