Namespaces
Variants

std:: get_if (std::variant)

From cppreference.net
Utilities library
Definido en el encabezado <variant>
(1) (desde 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) (desde 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) Accesor basado en índice que no lanza excepciones: Si pv no es un puntero nulo y pv - > index ( ) == I , devuelve un puntero al valor almacenado en la variante apuntada por pv . De lo contrario, devuelve un valor de puntero nulo. La llamada está mal formada si I no es un índice válido en la variante.
2) Accesor basado en tipo que no lanza excepciones: Equivalente a (1) con I siendo el índice de base cero de T en Types... . La llamada está mal formada si T no es un elemento único de Types... .

Contenidos

Parámetros de plantilla

I - índice a buscar
Type - tipo único a buscar

Parámetros

pv - puntero a una variante

Valor de retorno

Puntero al valor almacenado en la variante apuntada o puntero nulo en caso de error.

Ejemplo

#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);
}

Salida:

variant value: 12
failed to get value!

Véase también

lee el valor del variant dado el índice o el tipo (si el tipo es único), lanza una excepción en caso de error
(plantilla de función)