std::get(std::variant)
From cppreference.com
| ヘッダ <variant> で定義 |
||
| (1) | (C++17以降) | |
| template< std::size_t I, class... Types > constexpr std::variant_alternative_t<I, std::variant<Types...>>& |
||
| template< std::size_t I, class... Types > constexpr std::variant_alternative_t<I, std::variant<Types...>>&& |
||
| template< std::size_t I, class... Types > constexpr const std::variant_alternative_t<I, std::variant<Types...>>& |
||
| template< std::size_t I, class... Types > constexpr const std::variant_alternative_t<I, std::variant<Types...>>&& |
||
| (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 をスローします。T が Types... の一意の要素でない場合、呼び出しは不定形です。目次 |
[編集] テンプレートパラメータ
| 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) |
| (C++11) |
tuple は指定された要素にアクセスする (関数テンプレート) |
| (C++11) |
array の要素にアクセスする(関数テンプレート) |
| (C++11) |
pairの要素にアクセスする(関数テンプレート) |
| (C++20) |
std::ranges::subrange からイテレータまたはセンチネルを取得します (関数テンプレート) |
| (C++26) |
std::complex から実部または虚部への参照を取得します (関数テンプレート) |