Namespaces
Variants

std:: get_if (std::variant)

From cppreference.net
Utilities library
헤더 파일에 정의됨 <variant>
(1) (C++17부터)
template < std:: size_t I, class ... Types >

constexpr std:: add_pointer_t < std:: variant_alternative_t < I, std:: variant < Types... >>>

get_if ( std:: variant < Types... > * pv ) noexcept ;
template < std:: size_t I, class ... Types >

constexpr std:: add_pointer_t < const std:: variant_alternative_t < I, std:: variant < Types... >>>

get_if ( const std:: variant < Types... > * pv ) noexcept ;
(2) (C++17부터)
template < class T, class ... Types >

constexpr std:: add_pointer_t < T >

get_if ( std:: variant < Types... > * pv ) noexcept ;
template < class T, class ... Types >

constexpr std:: add_pointer_t < const T >

get_if ( const std:: variant < Types... > * pv ) noexcept ;
1) 인덱스 기반 비-던지기 접근자: pv 가 null 포인터가 아니고 pv - > index ( ) == I 인 경우, pv 가 가리키는 variant에 저장된 값에 대한 포인터를 반환합니다. 그렇지 않으면 null 포인터 값을 반환합니다. I 가 variant의 유효한 인덱스가 아닌 경우 호출은 ill-formed입니다.
2) 타입 기반 비-던지기 접근자: (1) 과 동등하며, I Types... 에서 T 의 0-기반 인덱스입니다. T Types... 의 고유한 요소가 아닌 경우 호출은 형식이 잘못되었습니다.

목차

템플릿 매개변수

I - 조회할 인덱스
Type - 조회할 고유 타입

매개변수

pv - variant을 가리키는 포인터

반환값

가리키는 variant에 저장된 값에 대한 포인터 또는 오류 시 널 포인터.

예제

#include <iostream>
#include <variant>
int main()
{
    auto check_value = [](const std::variant<int, float>& v)
    {
        if (const int* pval = std::get_if<int>(&v))
            std::cout << "variant value: " << *pval << '\n';
        else
            std::cout << "failed to get value!" << '\n';
    };
    std::variant<int, float> v{12}, w{3.f};
    check_value(v);
    check_value(w);
}

출력:

variant value: 12
failed to get value!

참고 항목

인덱스나 타입(타입이 고유한 경우)이 주어졌을 때 variant의 값을 읽으며, 오류 발생 시 예외를 발생시킴
(함수 템플릿)