std::variant_size, std::variant_size_v
De cppreference.com
| 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>>.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>
|
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.
Ejemplo
Ejecuta este código
#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.
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) | |
| Obtiene el tamaño de una tupla en tiempo de compilación. (especialización de plantilla de clase) |