我不确定该主题是否与我正在寻找的主题完全匹配,但基本上是:
我可以做这个:
struct something {
int d;
} somethingType;
但为什么我不能这样做?
template <bool T>
struct somethingelse {
int d;
}<true> somethingelseType;
如果可以做第二个,那么正确的做法是什么?
我不确定该主题是否与我正在寻找的主题完全匹配,但基本上是:
我可以做这个:
struct something {
int d;
} somethingType;
但为什么我不能这样做?
template <bool T>
struct somethingelse {
int d;
}<true> somethingelseType;
如果可以做第二个,那么正确的做法是什么?
从语法上讲,我认为您可以,但是受到其他限制的禁止:
[温度]/1
模板定义了一个类或函数族或类型族的别名。
模板声明:
template <
模板参数列表>
声明模板参数列表:
模板参数
模板参数列表,
模板参数[...]
模板声明中的声明应
- 声明或定义一个函数或一个类,或
- 定义类模板或嵌套在类模板中的类的成员函数、成员类、成员枚举或静态数据成员,或
- 定义类或类模板的成员模板,或
- 是一个别名声明。
声明(顶级语法结构)可以是模板声明,因此这些规则直接适用于声明。
另一方面(即对于非模板类),声明也可以是块声明[dcl.dcl]/1,可以是简单声明,其中可以包含decl-specifier-seq,其中可以包含类型说明符[dcl.type]/1 可以是可以声明类 oO 的类说明符,使用此类型说明符可以声明变量:
(将每行的一个构造解析为其(可能的)组件)
声明 块声明 简单声明 decl-specifier-seq opt init-declarator-list opt ; type-secifier init-declarator-list opt ; 类说明符 init-declarator-list opt; 类头{成员规范选择} 初始化声明器列表选择; 类头{成员规范选择} 初始化声明器; 类头{成员规范选择} 声明器初始化器opt ; 类头{成员规范选择} ptr-declarator; 类头{成员规范opt } noptr-declarator; class-head { member-specification opt } declarator-id attribute-specifier-seq opt ; 类头{成员规范opt } ... opt id-expression ;
现在匹配,比如说,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