Namespaces
Variants

std::get_if (std::variant)

ja.cppreference.net より
 
 
ユーティリティライブラリ
言語サポート
型サポート (基本型、RTTI)
ライブラリ機能テストマクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

一般ユーティリティ
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)(C++20)(C++20)    
(C++20)
swap と 型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
共通語彙型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
ヘッダ <variant>
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;
で定義 (1)
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;
(C++17以上) (2)
template< class T, class... Types >
constexpr std::add_pointer_t<T>
    get_if( std::variant<Types...>* pv ) noexcept;
(C++17以上) (3)
template< class T, class... Types >
constexpr std::add_pointer_t<const T>
    get_if( const std::variant<Types...>* pv ) noexcept;
(C++17以上) (4)
(C++17以上)1,2)pv インデックスベースの非スローアクセサ: pv->index() == I がヌルポインタでなく、かつ pv の場合、I が指すバリアントに格納されている値へのポインタを返す。それ以外の場合は、ヌルポインタ値を返す。
がバリアントの有効なインデックスでない場合、この呼び出しは ill-formed である。3,4) 型ベースの非スローアクセサ: 以下と同等。(1)I ただし、T は Types... 内での T のゼロから始まるインデックスとする。Types... が

テンプレートパラメータ

I - 検索するインデックス
Type - 検索するユニーク型

パラメータ

pv - バリアントへのポインタ

戻り値

指されたvariantに格納されている値へのポインタ、またはエラー時のnullポインタ。

例

#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の値を読み取り、エラー時には例外をスローする
(関数テンプレート)