我不确定该主题是否与我正在寻找的内容完全匹配,但基本上是:

我可以做这个:

struct something {
    int d;
} somethingType;

但是为什么我不能这样做呢?
template <bool T>
struct somethingelse {
    int d;
}<true> somethingelseType;

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

最佳答案

我认为你可以,语法上,但它是由额外的限制禁止:

[温度]/1



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

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

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

宣言
块声明
简单声明
声明说明符-seqopt init-declarator-listopt ;
type-secifier init-declarator-listopt ;
类说明符 init-declarator-listopt ;
class-head { member-specificationopt } init-declarator-listopt ;
class-head { member-specificationopt } init-declarator ;
class-head { member-specificationopt } declarator initializeropt ;
class-head { member-specificationopt } ptr-declarator ;
class-head { member-specificationopt } noptr-declarator ;
class-head { member-specificationopt } declarator-id attribute-specifier-seqopt ;
class-head { member-specificationopt } ...opt id-expression ;

现在匹配,比如说,struct something { int d; } somethingType;
但这将是一个变量的声明,这在模板案例中是不允许的。

关于c++ - 在定义时初始化模板结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19941203/

10-09 13:23