std:: variant_alternative, std:: variant_alternative_t
|
Definido en el encabezado
<variant>
|
||
|
template
<
std::
size_t
I,
class
T
>
struct variant_alternative ; /* indefinido */ |
(1) | (desde C++17) |
|
template
<
std::
size_t
I,
class
...
Types
>
struct variant_alternative < I, variant < Types... >> ; |
(2) | (desde C++17) |
|
template
<
std::
size_t
I,
class
T
>
class
variant_alternative
<
I,
const
T
>
;
|
(3) | (desde C++17) |
|
template
<
std::
size_t
I,
class
T
>
class
variant_alternative
<
I,
volatile
T
>
;
|
(3) |
(desde C++17)
(obsoleto en C++20) |
Proporciona acceso indexado en tiempo de compilación a los tipos de las alternativas del variant posiblemente calificado con cv, combinando las calificaciones cv del variant (si las hay) con las calificaciones cv de la alternativa.
Formalmente,
type
igual al tipo de la alternativa con índice
I
type
que nombra, respectivamente,
std::
add_const_t
<
std
::
variant_alternative_t
<
I,T
>>
,
std::
add_volatile_t
<
std
::
variant_alternative_t
<
I,T
>>
, y
std::
add_cv_t
<
std
::
variant_alternative_t
<
I,T
>>
Contenidos |
Tipos de miembros
| Tipo de miembro | Definición |
| type |
el tipo de la
I
-ésima alternativa de la variante, donde
I
debe estar en
[0, sizeof...(Types))
, de lo contrario el programa está mal formado.
|
Alias de plantilla auxiliar
|
template
<
size_t I,
class
T
>
using variant_alternative_t = typename variant_alternative < I, T > :: type ; |
(desde C++17) | |
Ejemplo
#include <variant> #include <iostream> using my_variant = std::variant<int, float>; static_assert(std::is_same_v <int, std::variant_alternative_t<0, my_variant>>); static_assert(std::is_same_v <float, std::variant_alternative_t<1, my_variant>>); // La calificación cv en el tipo variant se propaga al tipo alternativo extraído. static_assert(std::is_same_v <const int, std::variant_alternative_t<0, const my_variant>>); int main() { std::cout << "All static assertions passed.\n"; }
Salida:
All static assertions passed.
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2974 | C++17 | el índice fuera de límites resultaba en comportamiento indefinido | se convierte en mal formado |
Véase también
|
(C++17)
|
obtiene el tamaño de la lista de alternativas del
variant
en tiempo de compilación
(plantilla de clase) (plantilla de variable) |
|
(C++11)
|
obtiene el tipo del elemento especificado
(especialización de plantilla de clase) |