模板参数列表的模板参数是什么意思

时间:2014-05-22 03:46:10

标签: c++ templates

引用自3.3.9 / 1:

  

a的模板参数名称的声明性区域   template template-parameter是最小的模板参数列表   这个名字的介绍。

你能举个例子来理解上面的定义吗?我也有兴趣了解模板参数的template-parameter-list是什么意思?一个例子会有所帮助。

2 个答案:

答案 0 :(得分:5)

template< // outer template-parameter-list
    template< // inner template-parameter-list
        typename q, // named parameter of a template template-parameter
        q x // use that name
    > // the declarative region ends here
    class q // hence the name may be reused
> struct x {};

如果这有助于跟进,那么它再次没有评论:

template< template< typename q, q x > class q >
struct x {};

它是在模板上参数化的类,它采用给定类型的常量值。例如,您可以x< std::integral_constant >

答案 1 :(得分:2)

它将模板模板参数的范围限制在最里面的参数列表中,例如以下是有效的

template<template<typename U, typename V = U> class T>
struct foo
{
  T<int> bar(); // T<int, int>
};

但这不是

template<template<typename U> class T>
struct foo
{
  U bar(); // error: ‘U’ does not name a type
};