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]

더 알아보기 (Learn more)

cppreference