这里是一个简单的例子,
我们可以像这样定义一个低级别的union
:
static union
{
uint64_t a;
uint8_t b[8];
};
但是我们不能像这样声明std::variant
(请不要在意语法,如果我有错请指出,只需抓住思想)
std::variant<uint64_t, uint8_t[8]> v
cppReference明确表示:
模板参数
类型 - 可存储在此变体中的类型。所有类型必须是(可能带有cv修饰符的)非数组对象类型。
此外,MSVC-v141(C++17)编译器给出了一个编译错误:
Error C2338 所有的Ts必须是非数组对象类型([variant.variant]/2)。
std::variant
主要是一个类模板,因此,问题在于它无法推断数组类型的存储方式,因为它只需要数据布局/表示?
std::array
。 - Cheers and hth. - Alfstd::variant<uint64_t, std::array<uint8_t>[8]> v
类似这样? - Buddhika Chaturangastd::array<uint8_t, 8>
- llllllllll