Espacios de nombres
Variantes
Acciones

std::variant_size, std::variant_size_v

De cppreference.com
< cpp‎ | utility‎ | variant
 
 
Biblioteca de servicios
 
 
Definido en el archivo de encabezado <variant>
template <class T>
struct variant_size; /* sin definir */
(1) (desde C++17)
template <class... Types>

struct variant_size<std::variant<Types...>>

: std::integral_constant<std::size_t, sizeof...(Types)> { };
(2) (desde C++17)
template <class T> class variant_size<const T>;
(3) (desde C++17)
template <class T> class variant_size<volatile T>;
template <class T> class variant_size<const volatile T>;
(3) (desde C++17)
(en desuso en C++20)

Proporciona acceso al número de alternativas en un variante posiblemente calificado-cv como una expresión constante en tiempo de compilación.

Formalmente,

2) cumple con los requerimientos de UnaryTypeTrait con una característica de base std::integral_constant<std::size_t, sizeof...(Types)>;
3) cumple con los requerimientos de UnaryTypeTrait con una característica de base std::integral_constant<std::size_t, variant_size<T>>.

Contenido

[editar] Plantilla de variable auxiliar

template <class T>
inline constexpr std::size_t variant_size_v = std::variant_size<T>::value;
(desde C++17)

Heredado de std::integral_constant

Constantes miembro

value
[estático]
sizeof...(Types)
(constante miembro pública estática)

Funciones miembro

operator std::size_t
Convierte el objeto a std::size_t, devuelve value.
(función miembro pública)
operator()
(C++14)
Devuelve value.
(función miembro pública)

Tipos miembro

Tipo Definición
value_type std::size_t
type std::integral_constant<std::size_t, value>

[editar] Notas

Todas las especializaciones de std::variant_size satisfacen a UnaryTypeTrait con una característica de base std::integral_constant<std::size_t, N> para algunas N.

[editar] Ejemplo

#include <any>
#include <cstdio>
#include <variant>
 
static_assert(std::variant_size_v<std::variant<>> == 0);
static_assert(std::variant_size_v<std::variant<int>> == 1);
static_assert(std::variant_size_v<std::variant<int, int>> == 2);
static_assert(std::variant_size_v<std::variant<int, int, int>> == 3);
static_assert(std::variant_size_v<std::variant<int, float, double>> == 3);
static_assert(std::variant_size_v<std::variant<std::monostate, void>> == 2);
static_assert(std::variant_size_v<std::variant<const int, const float>> == 2);
static_assert(std::variant_size_v<std::variant<std::variant<std::any>>> == 1);
 
int main() { std::puts("Pasaron todas las aserciones estáticas."); }

Salida:

Pasaron todas las aserciones estáticas.

[editar] Véase también

Obtiene el tipo de la alternativa dado su subíndice, en tiempo de compilación.
(plantilla de clase) (plantilla de alias) [editar]
Obtiene el tamaño de una tupla en tiempo de compilación.
(especialización de plantilla de clase) [editar]