繁体   English   中英

在定义时初始化模板结构

[英]Initialize a template struct at definition

我不确定这个话题是否与我想要的完全匹配,但这里基本上是:

我可以做这个:

struct something {
    int d;
} somethingType;

但为什么我不能这样做呢?

template <bool T>
struct somethingelse {
    int d;
}<true> somethingelseType;

如果可以做第二个,那么这样做的正确方法是什么?

我认为你可以在语法上,但它被其他限制所禁止:

[温度] / 1

模板定义类或函数族或类型族的别名。

模板声明:
template < template-parameter-list > 声明

模板参数列表:
模板参数
template-parameter-list , template-parameter

[...]

模板 声明中的声明

  • 声明或定义函数或类,或
  • 定义成员函数,成员类,成员枚举,或类模板或嵌套在类模板中的类的静态数据成员,或者
  • 定义类或类模板的成员模板,或
  • 是一个别名声明

声明(顶级语法结构)可以是模板声明 ,因此这些规则直接适用于声明。

另一方面(即对于非模板类), 声明也可以是块声明 [dcl.dcl] / 1,它可以是一个简单声明 ,它可以包含一个可以包含的decl-specifier-seq一个类型说明符 [dcl.type] / 1,它可以是一个类说明符 ,它可以声明一个类oO并使用这个类型说明符你可以声明一个变量:

(将每行一个构造解析为其(可能的)组件)




 ;
 ;
 ;
 {  }    ;
 {  }    ;
 {  }    ;
 {  }    ;
 {  }    ;
 {  }    ;
 {  }   ... ;

现在匹配,例如, struct something { int d; } somethingType; struct something { int d; } somethingType;

但这将是变量的声明,模板案例不允许这样做。

我认为你不能。

您可以按对象名称(根据http://www.cplusplus.com/doc/tutorial/structures/ )跟踪结构,而不是按模板参数。

type-specifier可以是

  • trailing-type-specifier
  • class-specifier
  • enum-specifier

如您所见, template-declaration不包括在内,因此您所寻找的内容不存在(直接)

查看超链接的C ++ 11语法规则的在线版本: http//www.nongnu.org/hcb/#type-specifier

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM