class 的默认模板参数

Default template parameter with class

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

template<class T = class Z>
struct X
  {};

第二个 "class" 关键字在此上下文中是什么意思?

真的没什么特别的。 C++ 允许您通过 elaborated type specifier 引用 class。例如

void foo(class bar*);

这声明了一个函数 foo,它接受 bar* 类型的参数。如果之前未声明 [​​=15=],则此精心设计的类型说明符在包含 foo 的名称空间中构成 bar 的声明。 IE。就好像你写了:

class bar;
void foo(bar*);

回到你的例子,X 是一个 class 模板,它需要一个单一类型的参数,由 class T 表示,但可以被表示为与 typename T.所述类型参数有一个默认参数,由详尽的 class 说明符 class Z 命名。该声明可以像上面的函数一样重写:

class Z;
template<class T = Z>
struct X
  {};