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

时间:2016-03-09 14:49:26

标签: c++ templates

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

template <typename Container, typename T>
bool
foo (const Container <T> &);

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

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

也不起作用

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

所以,

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

1 个答案:

答案 0 :(得分:7)

你可以这样做:

template <template <class... > class Container, class T>
bool foo (const Container<T> &);

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

请记住,当你有template <class T>时,你希望T成为类型。 std::vector不是类型,而是模板。 std::vector<int>是一种类型,但这不是模板,因此您无法拥有std::vector<int> <char>