似乎联合可以在c ++ 11中模板化,例如在the reference implementation of std::optional中使用它们。
在c ++ 11之前可能吗?
答案 0 :(得分:26)
是的,似乎总是允许这样做。 union是一个类,模板是函数或类模板。
标准的相关部分:
[温度]
模板声明中的声明应
- 声明或定义一个函数或类,[...]
[类]
union 是使用class-key
定义的类union
(因此有人可能认为新类型特征std::is_class
有点用词不当;特征应该划分类型的空间,因此is_union
是一个独立的,互斥的特征。)
答案 1 :(得分:14)
是的,我之前使用过类似的结构:
template <typename T>
union test
{
unsigned char ch[sizeof(T)];
T variable;
};
答案 2 :(得分:0)
从c ++ 17 https://en.cppreference.com/w/cpp/utility/variant起,您也可以使用std :: variant代替联合,