名前空間
変種
操作

std::get(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::variant_alternative_t<I, std::variant<Types...>>&

    get( std::variant<Types...>& v );
template< std::size_t I, class... Types >

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

    get( std::variant<Types...>&& v );
template< std::size_t I, class... Types >

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

    get( const std::variant<Types...>& v );
template< std::size_t I, class... Types >

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

    get( const std::variant<Types...>&& v );
(2) (C++17以降)
template< class T, class... Types >
constexpr T& get( std::variant<Types...>& v );
template< class T, class... Types >
constexpr T&& get( std::variant<Types...>&& v );
template< class T, class... Types >
constexpr const T& get( const std::variant<Types...>& v );
template< class T, class... Types >
constexpr const T&& get( const std::variant<Types...>&& v );
1) インデックスベースの値アクセサ:v.index() = I の場合、v に格納されている値への参照を返します。それ以外の場合は、std::bad_variant_access をスローします。I がバリアントの有効なインデックスでない場合、呼び出しは不定形です。
2) 型ベースの値アクセサ:v が代替型 T を保持している場合、v に格納されている値への参照を返します。それ以外の場合は、std::bad_variant_access をスローします。TTypes... の一意の要素でない場合、呼び出しは不定形です。

目次

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

I - 検索するインデックス
T - 検索する一意の型
Types... - variant を形成する型

[編集] パラメータ

v - variant

[編集] 戻り値

バリアントに格納されている値への参照。

[編集] 例外

1,2) エラー時に std::bad_variant_access をスローします。

[編集]

#include <iostream>
#include <string>
#include <variant>
 
int main()
{
    std::variant<int, float> v{12}, w;
    std::cout << std::get<int>(v) << '\n';
    w = std::get<int>(v);
    w = std::get<0>(v); // same effect as the previous line
 
//  std::get<double>(v); // error: no double in [int, float]
//  std::get<3>(v);      // error: valid index values are 0 and 1
 
    try
    {
        w = 42.0f;
        std::cout << std::get<float>(w) << '\n'; // ok, prints 42
        w = 42;
        std::cout << std::get<float>(w) << '\n'; // throws
    }
    catch (std::bad_variant_access const& ex)
    {
        std::cout << ex.what() << ": w contained int, not float\n";
    }
}

実行結果の例

12
42
Unexpected index: w contained int, not float

[編集] 関連項目

(C++17)
インデックスまたは型(一意である場合)を指定して、ポインタが指す variant の値へのポインタを取得する。エラーの場合は null を返す
(function template) [編集]
tuple は指定された要素にアクセスする
(関数テンプレート) [編集]
array の要素にアクセスする
(関数テンプレート) [編集]
pairの要素にアクセスする
(関数テンプレート) [編集]
std::ranges::subrange からイテレータまたはセンチネルを取得します
(関数テンプレート) [編集]
std::complex から実部または虚部への参照を取得します
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)