基本的 stdvariant 使用
這會建立一個可以儲存 int
或 string
的變體(標記的聯合)。
std::variant< int, std::string > var;
我們可以在其中儲存任何一種型別:
var = "hello"s;
我們可以通過 std::visit
訪問內容:
// Prints "hello\n":
visit( [](auto&& e) {
std::cout << e << '\n';
}, var );
通過傳入多型 lambda 或類似的函式物件。
如果我們確定我們知道它是什麼型別,我們可以得到它:
auto str = std::get<std::string>(var);
但如果我們弄錯了,這就會丟擲。get_if
:
auto* str = std::get_if<std::string>(&var);
如果你猜錯了,就會返回 nullptr
。
變體保證不動態記憶體分配(除了由其包含的型別分配的動態記憶體分配)。變數中只有一種型別儲存在那裡,並且在極少數情況下(在分配時涉及異常而沒有安全的退出方式)變數可能變空。
變體允許你安全有效地將多個值型別儲存在一個變數中。它們基本上是智慧的,型別安全的 union
s。