中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

c++標準庫中的visit函數有哪些

c++
小樊
93
2024-09-16 13:40:12
欄目: 編程語言

在 C++ 標準庫中,std::visit 是一個用于處理 std::variant 類型的函數。std::variant 是一種類型安全的聯合體(union),可以存儲不同類型的值。std::visit 函數允許你以類型安全的方式訪問 std::variant 中存儲的值。

std::visit 的基本語法如下:

template< class Visitor, class... Variants >
constexpr decltype(auto) visit( Visitor&& vis, Variants&&... vars );

其中,Visitor 是一個可調用對象,它可以接受 Variants 中的任何類型作為參數。vars 是一個或多個 std::variant 實例。

std::visit 的工作原理是將 Visitor 應用于 vars 中的每個 std::variant。如果 vars 中的所有 std::variant 都包含相同的類型,那么 Visitor 將被調用一次,傳入這些類型的值。否則,std::visit 會依次嘗試每個可能的類型組合,直到找到一個匹配的組合并調用 Visitor

下面是一個簡單的示例,展示了如何使用 std::visit

#include<iostream>
#include<variant>

struct PrintVisitor {
    void operator()(int i) const {
        std::cout << "int: " << i << std::endl;
    }

    void operator()(float f) const {
        std::cout << "float: " << f << std::endl;
    }
};

int main() {
    std::variant<int, float> v1 = 42;
    std::variant<int, float> v2 = 3.14f;

    std::visit(PrintVisitor{}, v1); // 輸出 "int: 42"
    std::visit(PrintVisitor{}, v2); // 輸出 "float: 3.14"

    return 0;
}

在這個示例中,我們定義了一個名為 PrintVisitor 的訪問者類,它可以打印 intfloat 類型的值。然后,我們創建了兩個 std::variant 實例,分別存儲 intfloat 類型的值。最后,我們使用 std::visit 函數將 PrintVisitor 應用于這兩個 std::variant 實例,從而打印它們的值。

0
开化县| 龙井市| 眉山市| 璧山县| 久治县| 和静县| 六枝特区| 宁蒗| 晋中市| 惠水县| 永吉县| 盐亭县| 太原市| 库伦旗| 和平县| 阿巴嘎旗| 高雄县| 姜堰市| 水城县| 方城县| 城步| 敦化市| 新平| 崇文区| 健康| 成都市| 宜都市| 大洼县| 全椒县| 周宁县| 二连浩特市| 虹口区| 潜江市| 迁西县| 乌什县| 香格里拉县| 香港| 理塘县| 德保县| 巴彦淖尔市| 阿鲁科尔沁旗|