2013-12-23 43 views
21

看来工会可以在c + + 11模板化,他们用于例如the reference implementation of std::optional联合可以模板化吗?

C++ 11之前有可能吗?

+3

'的std :: optional'没有更多:-( –

+0

(这是一个奇怪的决定,将init标志放在类的顶部,而不是数据成员,我认为便宜的解引用比有效性检查更受欢迎。) –

+0

@KerrekSB这很伤心对于std ::可选:(对于实现的东西,它似乎甚至[boost ::可选实现](http://www.boost.org/doc/libs/1_55_0/boost/optional/optional.hpp)将其布尔值在其数据之前。 – Drax

回答

20

是的,似乎这一直被允许。联合是一个类,而模板是一个函数或一个类模板。

的标准的相关部分:

  • [温度]

    声明模板声明

    - 声明或定义一个函数或[...]

  • [类]

    联合是具有所定义的类的类键union

(所以有人会认为,新型性状std::is_class轻微用词不当;性状都应该分区类型的空间,所以is_union是一个独立的,相互排斥的特质)

+1

我甚至不知道“一个工会是一个班级”!很高兴我问了这个问题:) – Drax

9

是的,我已经使用结构,如之前:

template <typename T> 
union test 
{ 
    unsigned char ch[sizeof(T)]; 
    T variable; 
};