如何在STL容器中存储模板化的异构对象

Vla*_*nko 2 c++ generics templates stl visual-c++

问题是关于在MS Visual C++ 11中开发的代码,只能访问STL,没有Boost.

有一个包装器模板类,大致有这个标头:

template <typename Payload>
class Wrapper {
  Payload p;
  std::string src;
  Wrapper( std::string, Payload );

  Payload get();      // returns payload
  void set(Payload);  // replaces payload
  void operator ()(); // uses payload
}
Run Code Online (Sandbox Code Playgroud)

Payload 可能是任何东西 - 指针,int,甚至是重物.

之后,Wrapper需要进入一个容器,比如std::vector- 但不管它们的具体参数类型如何.这给我带来了麻烦,因为容器需要同质的元素.

我已经尝试了基类建议,这样从KennyTM,但它给了我与方法的一些问题get()set()-那些需要投从载体使用时,因为元素,看起来像一个基类,如果通过回答提出的模式中使用(?).

Dav*_*eas 5

为此,您需要使用某种类型的擦除.从最基本的(提供基本类型,通过指针存储元素到基础)到更高级的解决方案,如boost ::任何你可以选择(我知道你提到没有提升,但你总是可以看看实现) .或者,如果有效载荷集是已知的并且相对较小,则可以使用变体方法(类似于boost :: variant),但是对于单次使用可能更难实现.