std :: vector或其他数据结构中不同类型的对象

时间:2012-01-06 12:10:45

标签: c++ stl

我想存储这样的结构

  template <typename var_type> struct
  {
  int some_var;
  //...some antoher vars
  var_type problem_var;
  };

在矢量或类似矢量的东西,我该怎么做?我无法使用模板内容创建矢量

3 个答案:

答案 0 :(得分:5)

如果您事先知道类型列表,boost::variant<>可能比boost::any更合适。在您的情况下,您可能需要

typedef boost:variant<
   mystruct<float>,
   mystruct<int>
   mystruct<std::string>
> my_variant;

这将只允许这3种类型。或者,您可能需要表面上相似的mystruct<boost:variant<float, int, std::string> >。我无法从你的问题中判断哪一个最适合你的问题。

答案 1 :(得分:1)

您可以使用Boost.Any之类的内容。

答案 2 :(得分:0)

您不能创建一个类层次结构,其中包含您需要存储的对象类型,并在插入向量时始终向上转换为基类吗?

缺点是,当从向量中提取项目或使用基类接口(可能是getter方法)时,您始终必须知道要向下转换的类型。