C++ 庫 - <variant>



C++ 中的 <variant> 標頭檔案提供了一種型別安全的聯合體,稱為 std::variant,它允許我們同時處理多種資料型別。此標頭檔案是通用實用程式庫的一部分。std::variant 會跟蹤當前持有的型別並確保安全訪問。我們可以使用 std::visit 輕鬆處理包含的型別。

包含 <variant> 標頭檔案

要在 C++ 程式中包含 <variant> 標頭檔案,可以使用以下語法。

#include <variant>

<variant> 標頭檔案的函式

以下是 <variant> 標頭檔案中所有函式的列表。

訪問器函式

這些函式允許我們訪問和操作包含在 std::variant: 中的值(通常是函式或函式物件)。

序號 函式及描述
1 visit

此函式使用一個或多個變體的引數呼叫提供的函式物件。

2 holds_alternative

此函式檢查變體當前是否持有給定型別。

3 get

此函式讀取給定索引或型別(如果型別唯一)的變體的值,在出錯時丟擲異常。

4 get_if

此函式獲取指向給定索引或型別(如果唯一)的指向變體的值的指標,在出錯時返回空指標。

訪問值

在以下示例中,我們將使用 get 函式訪問 varient 物件的值。

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double> myVariant = 42; 
    int value = std::get<int>(myVariant);  
    std::cout << "The value is: " << value << std::endl;
    return 0;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

The value is: 42

比較運算子

序號 函式及描述
1 operator==

此函式檢查兩個物件是否持有相同的型別,以及它們包含的值是否相等。

2 operator!=

如果兩個變體持有不同的型別或其包含的值不相等,則此函式返回 true。

3 operator<=

此函式按字典順序比較兩個物件。如果第一個變體的包含值小於第二個變體的包含值,則返回 true,前提是它們持有相同的型別。

4 operator<=

如果第一個變體小於或等於第二個變體,則此函式返回 true。

5 operator>

此函式檢查第一個變體是否大於第二個變體。

6 operator>=

此函式檢查第一個變體是否大於或等於第二個變體。

7 operator<=>

此函式/運算子提供兩個變體之間的三向比較。

值比較

在以下示例中,我們將使用 opearator== 檢查兩個物件是否包含相同的值。

#include <iostream>
#include <variant>
int main() {
  std::variant < int, double > variant1 = 42;
  std::variant < int, double > variant2 = 42;

  if (variant1 == variant2) {
    std::cout << "Variants are equal!" << std::endl;
  } else {
    std::cout << "Variants are not equal." << std::endl;
  }
  return 0;
}

輸出

以下是上述程式碼的輸出:

Variants are equal!

實用程式函式

序號 函式及描述
1 std::swap

此函式模板專門化了 std::swap 演算法。

交換兩個變體

在以下示例中,我們將使用 std::swap 交換兩個變體的內容。

#include <iostream>
#include <variant>
#include <utility>
int main() {
    std::variant<int, double> v1 = 100, v2 = 3.14;

    std::cout <<"Before: v1 = " << std::get<int>(v1) << ", v2 = " << std::get<double>(v2) << std::endl;
    std::swap(v1, v2);
    std::cout << "After: v1 = " << std::get<double>(v1) << ", v2 = " << std::get<int>(v2) << std::endl;
    return 0;
}

輸出

上述程式碼的輸出如下:

Before: v1 = 100, v2 = 3.14
After: v1 = 3.14, v2 = 100
廣告