std::get (std::variant)
提供: cppreference.com
ヘッダ <variant> で定義 | ||
(1) | (C++17以上) | |
template<std::size_t I, class... Types> constexprstd::variant_alternative_t<I, std::variant<Types...>>& | ||
template<std::size_t I, class... Types> constexprstd::variant_alternative_t<I, std::variant<Types...>>&& | ||
template<std::size_t I, class... Types> constexprconststd::variant_alternative_t<I, std::variant<Types...>>& | ||
template<std::size_t I, class... Types> constexprconststd::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> constexprconst T& get(conststd::variant<Types...>& v ); | ||
template<class T, class... Types> constexprconst T&& get(conststd::variant<Types...>&& v ); | ||
1) インデックスベースの値アクセサ。 v.index()== I であれば、
v
に格納されている値を指す参照を返します。 そうでなければ、 std::bad_variant_access を投げます。 I
が variant の有効なインデックスでなければ、この呼び出しは ill-formed です。2) 型ベースの値アクセサ。 v が選択肢
T
を保持していれば、 v
に格納されている値を指す参照を返します。 そうでなければ、 std::bad_variant_access を投げます。 T
が Types...
内の一意な要素でなければ、この呼び出しは ill-formed です。目次 |
[編集]テンプレート引数
I | - | 調べるインデックス |
T | - | 調べる一意な型 |
Types... | - | variant を形成する型 |
[編集]引数
v | - | variant |
[編集]戻り値
variant に格納されている値を指す参照。
[編集]例外
1,2) エラーの場合 std::bad_variant_access を投げます。
[編集]例
Run this code
#include <variant>#include <string> int main(){std::variant<int, float> v{12}, w;int i = std::get<int>(v); 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{ std::get<float>(w);// w contains int, not float: will throw}catch(std::bad_variant_access&){}}
[編集]関連項目
(C++17) | 指定されたインデックスまたは型 (一意な場合) の値へのポインタを取得します。 エラーの場合はヌルを返します (関数テンプレート) |
タプルの指定された要素にアクセスします (関数テンプレート) | |
array の要素にアクセスします (関数テンプレート) | |
(C++11) | pair の要素にアクセスします (関数テンプレート) |