Namespaces
Variants

std::get(std::variant)

cppreference.net에서
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐지됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
Swap 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
헤더 <variant>
template< std::size_t I, class... Types >
constexpr std::variant_alternative_t<I, std::variant<Types...>>&
    get( std::variant<Types...>& v );
에 정의됨 (1) (C++17부터)
template< std::size_t I, class... Types >
constexpr std::variant_alternative_t<I, std::variant<Types...>>&&
    get( std::variant<Types...>&& v );
(2) (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) (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) (C++17부터)
template< class T, class... Types >
constexpr T& get( std::variant<Types...>& v );
(5) (C++17부터)
template< class T, class... Types >
constexpr T&& get( std::variant<Types...>&& v );
(6) (C++17부터)
template< class T, class... Types >
constexpr const T& get( const std::variant<Types...>& v );
(7) (C++17부터)
template< class T, class... Types >
constexpr const T&& get( const std::variant<Types...>&& v );
(8) (C++17부터)
1-4) 인덱스 기반 값 접근자: 만약 v.index() == I이라면, v에 저장된 값에 대한 참조를 반환합니다. 그렇지 않으면, std::bad_variant_access를 던집니다. I이 variant에서 유효한 인덱스가 아니라면 호출은 ill-formed입니다.
5-8) 타입 기반 값 접근자: 만약 v이 대안 T을 담고 있다면, v에 저장된 값에 대한 참조를 반환합니다. 그렇지 않으면, std::bad_variant_access를 던집니다. T이 Types...의 유일한 요소가 아니라면 호출은 ill-formed입니다.

템플릿 매개변수

I - 조회할 인덱스
T - 조회할 고유 타입
Types... - variant 을 구성하는 타입들

매개변수

v - a variant

반환값

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); // 이전 줄과 동일한 효과
//  std::get<double>(v); // 오류: [int, float]에 double 없음
//  std::get<3>(v);      // 오류: 유효한 인덱스 값은 0과 1
    try
    {
        w = 42.0f;
        std::cout << std::get<float>(w) << '\n'; // ok, 42 출력
        w = 42;
        std::cout << std::get<float>(w) << '\n'; // 예외 발생
    }
    catch (std::bad_variant_access const& ex)
    {
        std::cout << ex.what() << ": w에 float가 아닌 int가 포함됨\n";
    }
}

가능한 출력:

12
42
Unexpected index: w contained int, not float

참고 항목

(C++17)
인덱스나 타입(고유한 경우)이 주어지면 가리키는 variant 값에 대한 포인터를 얻으며, 오류 시 null을 반환함
(함수 템플릿)
튜플의 지정된 요소에 접근함
(함수 템플릿)
array 의 요소에 접근함
(함수 템플릿)
pair 의 요소에 접근함
(함수 템플릿)
std::ranges::subrange 에서 반복자나 센티널을 얻음
(함수 템플릿)
std::complex 에서 실수부나 허수부에 대한 참조를 얻음
(함수 템플릿)