静态成员的我一直读到你可以定义一个特质像初始化的特质
enum MyEnum { val_1, val_2, val_3 };
template< typename T >
struct my_trait {
static const MyEnum value = MyEnum::val_1;
};
,然后专门它
template<>
struct my_trait <void>{
static const MyEnum value = val_3;
};
当我尝试它,我总是得到一个链接错误,因为static
成员没有定义,所以我必须明确地将其专门化为源文件
MyEnum my_trait <void>::value = val_3;
和更改在标题中
template<>
struct is_void<void>{
static const MyEnum value;
};
是否有任何方式直接在报头中定义的特征的定义而不必重新定义它在头?
它没有被定义ODR使用。 AFAICR,你不应该使用标准的':: value'。 – chris
你的意思是“一个定义规则” - 用什么? – Lezkus
@Lezkus“odr-used”是标准中的一个术语。撇开细微差别,它意味着“物体本身而不是价值被使用”。如绑定到参考或采取其地址。 – Angew