似乎在C++11中可以将联合定义为模板,在std::optional的参考实现中就有使用。
在C++11之前是否也可以这样做?
是的,似乎一直允许这样做。一个union是一个类,而模板则是函数或类模板。
标准的相关部分:
[temp]
在template-declaration中的声明应该
— 声明或定义一个函数或类[...]。
[class]
union是使用类关键字union定义的类
(因此,有人可能会认为新的类型特征std::is_class
是一个轻微的误称;特征应分割类型空间,因此is_union
是一个单独的、互斥的特征。)
是的,一个特别有用的应用程序是将类型同时表示为字节数组:
template <typename T>
union test
{
unsigned char ch[sizeof(T)];
T variable;
};
std::optional
已经不存在了 :-( - Kerrek SBstd::optional
不在那里了?原因是什么? - Koushik Shettystd::optional
自 C++17 起就已经存在了。 - xcvii