簡體   English   中英

正確使用 std::variant_alternative_t

[英]Correct usage of std::variant_alternative_t

我的目標是在 std::variant 的當前索引處獲取類型的名稱。 我所知道的是變量的當前索引。 我嘗試了不同的方法,但老實說,我在很大程度上無法理解文檔(cppreference)。 如果沒有一段工作代碼,所有這些重載的模板對我來說都是很復雜的。

我猜 std::variant_alternative_t 可能會有所幫助,但文檔不完整(沒有示例: https://en.cppreference.com/w/cpp/utility/variant/variant_alternative )。

讓我們假設以下示例。

std::variant<int, float> testVariant{ 12.2f };

std::cout << std::get<1>(testVariant); // Everything is cool
//std::cout << std::get<testVariant.index()>(testVariant) // Unfortunately, incorrect syntax 
//... why ever, i dont see any difference to the line above

//std::variant_alternative_t<???>(???) i dont have any cloud how to use it

正確的用法涉及到兩個模板 arguments:要索引到的索引和變體類型。

using MyIndexedType = std::variant_alternative_t<1, std::variant<int, float>>;

或者,如果您既不想拼出完整的變體也不想給它一個類型別名( using MyVariant = std::variant<int, float> ),請使用decltype

using MyIndexedType = std::variant_alternative_t<1, decltype(testVariant)>;

請注意,索引必須在編譯時已知。 您無法在編譯時了解所有 static 類型。

您需要訪問該變體,它將為您生成所有分支:

std::visit([&](auto const &value) {
    std::cout << "Index " << testVariant.index() << ", ";
    std::cout << "type " << typeid(decltype(value)).name() << ", ";
    std::cout << "value " << value << '\n';
}, testVariant);

在 Wandbox 上現場觀看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM