标准变体
Variant 是原始 union
使用的替代品。它是类型安全的并且知道它是什么类型,并且它应该在它应该的时候仔细地构造和销毁它内部的对象。
它几乎从不是空的:只有在更换其内容的角落情况下才会安全退出并最终处于空状态。
它的行为有点像 std::tuple
,有点像 std::optional
。
使用 std::get
和 std::get_if
通常是一个坏主意。正确的答案通常是 std::visit
,它可以让你在那里处理每一种可能性。if constexpr
可以在 visit
中使用,如果你需要分支你的行为,而不是做一系列运行时检查,复制 visit
将更有效地做什么。