名前空間
変種
操作

std::get_if (std::variant)

From cppreference.com
< cpp‎ | utility‎ | variant
 
 
ユーティリティライブラリ
言語サポート
型のサポート (基本型、RTTI)
ライブラリ機能検査マクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
 
 
ヘッダ <variant> で定義
(1) (C++17以降)
template< std::size_t I, class... Types >

constexpr std::add_pointer_t<std::variant_alternative_t<I, std::variant<Types...>>>

    get_if( std::variant<Types...>* pv ) noexcept;
template< std::size_t I, class... Types >

constexpr std::add_pointer_t<const std::variant_alternative_t<I, std::variant<Types...>>>

    get_if( const std::variant<Types...>* pv ) noexcept;
(2) (C++17以降)
template< class T, class... Types >

constexpr std::add_pointer_t<T>

    get_if( std::variant<Types...>* pv ) noexcept;
template< class T, class... Types >

constexpr std::add_pointer_t<const T>

    get_if( const std::variant<Types...>* pv ) noexcept;
1) インデックスベースの例外を投げないアクセサー: pv がヌルポインタではなく、かつ pv->index() == I の場合、pv が指す variant に格納されている値へのポインタを返します。それ以外の場合は、ヌルポインタ値を返します。I が variant の有効なインデックスでない場合、呼び出しは ill-formed です。
2) 型ベースの例外を投げないアクセサー: Types... における T のゼロベースのインデックスを I として (1) と同等です。TTypes... の一意な要素でない場合、呼び出しは ill-formed です。

目次

[編集] テンプレートパラメータ

I - 検索するインデックス
- 検索する一意な型

[編集] パラメータ

pv - variantへのポインタ

[編集] 戻り値

指し示された variant に格納されている値へのポインタ。エラー時にはヌルポインタ。

[編集]

#include <iostream>
#include <variant>
 
int main()
{
    auto check_value = [](const std::variant<int, float>& v)
    {
        if (const int* pval = std::get_if<int>(&v))
            std::cout << "variant value: " << *pval << '\n';
        else
            std::cout << "failed to get value!" << '\n';
    };
 
    std::variant<int, float> v{12}, w{3.f};
    check_value(v);
    check_value(w);
}

出力

variant value: 12
failed to get value!

[編集] 関連項目

インデックスまたは型(型が一意である場合)を指定して variant の値を読み取る。エラーの場合は例外をスローする
(function template) [編集]
English 日本語 中文(简体) 中文(繁體)