我可以用模板制作容器模板吗?

ZK_*_*ZK_ 1 c++ templates

template <class ContainerType, class elementType>
void SerializeContainer (    ContainerType< elementType > container )
{
}

//call like this 
std::vector<int>  vector;
SerializeContainer(vector);
Run Code Online (Sandbox Code Playgroud)

下面不会编译..有什么办法可以解决这个问题吗?

ken*_*ytm 5

使用value_type容器的成员来提取元素类型更容易:

  template <typename T>
  void SerializeContainer (const T& container)
  {
      typedef typename T::value_type ElementType;
      ..........
  }
Run Code Online (Sandbox Code Playgroud)

您的代码不起作用的原因是因为语法ContainerType<ElementType>仅在ContainerType真正模板时才有效.C++支持template-template参数:

template <template <typename> class ContainerType, typename ElementType>
void serializeContainer(const ContainerType<ElementType>& container) {
}
Run Code Online (Sandbox Code Playgroud)

但即使这 与标准C++容器也不匹配,因为有一些隐藏的默认参数.明确写明时:

std::vector<int, 
            std::allocate<int> >   vector;
Run Code Online (Sandbox Code Playgroud)

因此,您需要使ContainerType参数接受2个参数:

template <typename <typename, typename> C, typename E, typename A>
void serializeContainer(const C<E, A>& container) {
}
Run Code Online (Sandbox Code Playgroud)

但是这将不匹配,set::set因为它具有不同数量的模板参数:

std::set<int, 
         std::less<int>, 
         std::allocator<int> >  set;
Run Code Online (Sandbox Code Playgroud)

如果你想在匹配时明确拼写ElementType,那么根本就没有一个适合所有人的解决方案(在C++ 11之前).坚持容器提供的特性更好.