バリアントは、元のunion
使用に代わるものです。これは型保証され、どの型かを知っており、必要な時にその中のオブジェクトを慎重に構築し破棄します。
それはほとんど決して空ではありません:そのコンテンツを置き換えて安全に戻ってくることができないコーナーケースでのみ、それは空の状態に終わるかどうかです。
これはstd::tuple
ように動作し、 std::optional
と多少似ていstd::optional
。
std::get
とstd::get_if
は、普通は悪い考えです。正しい答えは通常はstd::visit
であり、そこではあらゆる可能性に対処できます。あなたの行動を分岐させる必要visit
場合、 visit
より効率的に行うvisit
に実行時検査のシーケンスを実行するのではなく、 if constexpr
をvisit
内で使用できるかどうかを確認します。