工会可以模板化吗?

时间:2013-12-23 12:27:30

标签: c++ templates unions

似乎联合可以在c ++ 11中模板化,例如在the reference implementation of std::optional中使用它们。

在c ++ 11之前可能吗?

3 个答案:

答案 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代替联合,