为什么我不能声明包含模板容器和模板包含值的类型?

spr*_*aff 7 c++ templates

为什么这个有效的C++不是?

template <typename Container, typename T>
bool
foo (const Container <T> &);
Run Code Online (Sandbox Code Playgroud)

g ++给了我Container is not a template这显然不是它的真正含义.

尝试template <typename Container> template <typename T>也不起作用,也不起作用const typename Container <T> &

对我来说,似乎有必要定义一个在容器和包含类型上都是通用的接口.

所以,

  • 在标准方面,为什么不允许这样做?
  • 在设计标准方面,为什么不允许这样做,会引起问题吗?
  • 除了基于迭代器的接口之外,C++ 14中是否有一种解决方法?

Ser*_*eyA 7

你可以这样做:

template <template <class... > class Container, class T>
bool foo (const Container<T> &);
Run Code Online (Sandbox Code Playgroud)

此语法(class...)告诉编译器这container是一个包含任意数量参数的模板.

记住,当你template <class T>想要T作为类型时.std::vector不是类型,它是模板.std::vector<int>是一种类型,但这不是模板,所以你不能拥有std::vector<int> <char>.

  • 你可以使用`template <class ...> class container`,它适用于`std :: vector`. (2认同)