C++ 类的默认模板参数

C++ 类的默认模板参数,c++,templates,default-value,C++,Templates,Default Value,我刚刚发现了默认模板参数的奇怪语法 template<class T = class Z> struct X {}; 模板 结构X {}; 在这种情况下,第二个“class”关键字是什么意思?其实没什么特别的。C++允许你通过一个类来引用一个类。例如 这声明了一个函数foo,该函数接受类型为bar*的参数。如果以前未声明bar,则此复杂类型说明符在包含foo的命名空间中构成bar的声明。也就是说,好像你写过: class bar; void foo(bar*); 回到您的示

我刚刚发现了默认模板参数的奇怪语法

template<class T = class Z>
struct X
  {};
模板
结构X
{};

在这种情况下,第二个“class”关键字是什么意思?

其实没什么特别的。C++允许你通过一个类来引用一个类。例如

这声明了一个函数
foo
,该函数接受类型为
bar*
的参数。如果以前未声明
bar
,则此复杂类型说明符在包含
foo
的命名空间中构成
bar
的声明。也就是说,好像你写过:

class bar;
void foo(bar*);
回到您的示例,
X
是一个类模板,它需要一个类型参数,由
class T
表示,但可以与
typename T
表示相同。所述类型参数有一个默认参数,由详细的类说明符
class Z
命名。该声明可以像上面的函数一样重写:

class Z;
template<class T = Z>
struct X
  {};
Z类;
模板
结构X
{};
class Z;
template<class T = Z>
struct X
  {};