将可变参数模板类存储到std :: vector中

时间:2020-06-07 11:29:02

标签: c++

template<typename...Args> 
class something {
     //...
};

class storage {

  template<typename...Args>
  void build_something_class_obj() {
     //...
  }
private:
  std::vector<???> m_container;
};

如何存储这样的类? Args可能有所不同,所以我无法创建存储模板类

1 个答案:

答案 0 :(得分:1)

something是不是类型的模板,但是vector中只能有一种类型的对象。除非您使用基类,否则something的不同实例化是完全不相关的:

struct something_base {};

template<typename...Args> 
class something : something_base {
     //...
};

现在您可以拥有一个std::vector<std::unique_ptr<something_base>>并将something的不同实例的实例推送到该向量中。

还有其他类型擦除的方法(例如std::anystd::variant)。最合适的方法取决于您要对向量中的元素执行什么操作。