Namespaces
Variants

std:: get (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:: variant_alternative_t < I, std:: variant < Types... >> &

get ( std:: variant < Types... > & v ) ;
template < std:: size_t I, class ... Types >

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

get ( std:: variant < Types... > && v ) ;
template < std:: size_t I, class ... Types >

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

get ( const std:: variant < Types... > & v ) ;
template < std:: size_t I, class ... Types >

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

get ( const std:: variant < Types... > && v ) ;
(2) (desde C++17)
template < class T, class ... Types >
constexpr T & get ( std:: variant < Types... > & v ) ;
template < class T, class ... Types >
constexpr T && get ( std:: variant < Types... > && v ) ;
template < class T, class ... Types >
constexpr const T & get ( const std:: variant < Types... > & v ) ;
template < class T, class ... Types >
constexpr const T && get ( const std:: variant < Types... > && v ) ;
1) Accesor de valor basado en índice: Si v. index ( ) == I , devuelve una referencia al valor almacenado en v . De lo contrario, lanza std::bad_variant_access . La llamada está mal formada si I no es un índice válido en el variant.
2) Accesor de valor basado en tipo: Si v contiene la alternativa T , devuelve una referencia al valor almacenado en v . De lo contrario, lanza std::bad_variant_access . La llamada está mal formada si T no es un elemento único de Types... .

Contenidos

Parámetros de plantilla

I - índice a buscar
T - tipo único a buscar
Types... - tipos que forman el variant

Parámetros

v - a variant

Valor de retorno

Referencia al valor almacenado en la variante.

Excepciones

1,2) Lanza std::bad_variant_access en caso de errores.

Ejemplo

#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); // mismo efecto que la línea anterior
//  std::get<double>(v); // error: no hay double en [int, float]
//  std::get<3>(v);      // error: los valores de índice válidos son 0 y 1
    try
    {
        w = 42.0f;
        std::cout << std::get<float>(w) << '\n'; // ok, imprime 42
        w = 42;
        std::cout << std::get<float>(w) << '\n'; // lanza excepción
    }
    catch (std::bad_variant_access const& ex)
    {
        std::cout << ex.what() << ": w contenía int, no float\n";
    }
}

Salida posible:

12
42
Unexpected index: w contained int, not float

Véase también

(C++17)
obtiene un puntero al valor de un variant apuntado dado el índice o el tipo (si es único), retorna null en caso de error
(plantilla de función)
accede al elemento especificado de una tupla
(plantilla de función)
accede a un elemento de un array
(plantilla de función)
accede a un elemento de un pair
(plantilla de función)
obtiene un iterador o centinela de un std::ranges::subrange
(plantilla de función)
obtiene una referencia a la parte real o imaginaria de un std::complex
(plantilla de función)