Espacios de nombres
Variantes
Acciones

std::get (std::variant)

De cppreference.com
< cpp‎ | utility‎ | variant
 
 
Biblioteca de servicios
 
 
Definido en el archivo de 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) Captador de valor basado en subí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 subíndice válido en el variante.
2) Captador de valor basado en tipo: Si v mantiene 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....

Contenido

[editar] Parámetros de plantilla

I - Subíndice a buscar.
T - Tipo único a buscar.
Types... - Tipos que forman el variante.

[editar] Parámetros

v - Un variante

[editar] Valor de retorno

Referencia al valor almacenado en el variante.

[editar] Excepciones

1,2) Lanza std::bad_variant_access cuando hay errores.

[editar] Ejemplo

#include <variant>
#include <string>
#include <iostream>
 
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);  // el 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 subíndice válidos son 0 y 1
 
    try
    {
        w = 42.0f;
        std::cout << std::get<float>(w) << '\n'; // de acuerdo, imprime 42
        w = 42;
        std::cout << std::get<float>(w) << '\n'; // lanza
    }
    catch (std::bad_variant_access const& ex)
    {
        std::cout << ex.what() << ": w contenía int, no float\n";
    }
}

Posible salida:

12
42
Subíndice inesperado: w contenía int, no float

[editar] Véase también

(C++17)
Obtiene un puntero al valor de un variante al que se apunta dado el subíndice del tipo (si es único), devuelve nulo cuando existe un error.
(plantilla de función) [editar]
La tupla accede al elemento especificado.
(plantilla de función) [editar]
Accede a un elemento de un array.
(plantilla de función) [editar]
accede a un elemento de un par.
(plantilla de función) [editar]