variant_get
variant_get (variant에서 값 가져오기)
std::get은 std::variant에 저장된 값을 지정된 인덱스 또는 타입으로 참조하는 함수예요. variant가 현재 보관 중인 값의 타입이 요청과 다르면 std::bad_variant_access 예외를 던져요. 이 함수는 C++17부터 사용할 수 있어요.
출처: cppreference
본문
| 헤더 |
||
|---|---|---|
| template < std :: size_t I , class ... Types > constexpr std :: variant_alternative_t < I , std :: variant < Types ... >>& get ( std :: variant < Types ... >& v ); | (1) | (since C++17) |
| template < std :: size_t I , class ... Types > constexpr std :: variant_alternative_t < I , std :: variant < Types ... >>&& get ( std :: variant < Types ... >&& v ); | (2) | (since C++17) |
| template < std :: size_t I , class ... Types > constexpr const std :: variant_alternative_t < I , std :: variant < Types ... >>& get ( const std :: variant < Types ... >& v ); | (3) | (since C++17) |
| template < std :: size_t I , class ... Types > constexpr const std :: variant_alternative_t < I , std :: variant < Types ... >>&& get ( const std :: variant < Types ... >&& v ); | (4) | (since C++17) |
| template < class T , class ... Types > constexpr T & get ( std :: variant < Types ... >& v ); | (5) | (since C++17) |
| template < class T , class ... Types > constexpr T && get ( std :: variant < Types ... >&& v ); | (6) | (since C++17) |
| template < class T , class ... Types > constexpr const T & get ( const std :: variant < Types ... >& v ); | (7) | (since C++17) |
| template < class T , class ... Types > constexpr const T && get ( const std :: variant < Types ... >&& v ); | (8) | (since C++17) |
Template parameters
| I | - | 조회할 인덱스 |
|---|---|---|
| T | - | 조회할 고유 타입 |
| Types... | - | variant를 구성하는 타입들 |
Parameters
| v | - | variant 객체 |
Return value
variant에 저장된 값에 대한 참조를 반환해요.
Exceptions
오류가 발생하면 std::bad_variant_access를 던져요.
Example
#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
See also
| get_if (C++17) | 인덱스 또는 타입(유일한 경우)이 주어졌을 때 가리키는 variant의 값에 대한 포인터를 얻고, 오류 시 null을 반환해요 (함수 템플릿) [edit] |
|---|---|
| get (std::tuple) (C++11) | tuple에서 지정된 요소에 접근해요 (함수 템플릿) [edit] |
| get (std::array) (C++11) | 배열의 요소에 접근해요 (함수 템플릿) [edit] |
| get (std::pair) (C++11) | pair의 요소에 접근해요 (함수 템플릿) [edit] |
| get (std::ranges::subrange) (C++20) | std::ranges::subrange에서 반복자 또는 센티널을 얻어요 (함수 템플릿) [edit] |
| get (std::complex) (C++26) | std::complex에서 실수부 또는 허수부에 대한 참조를 얻어요 (함수 템플릿) [edit] |