[英]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.