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
{};
我刚刚发现默认模板参数的一种奇怪语法
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
{};