std::variant_size, std::variant_size_v
Von cppreference.com
| Definiert in der Header-Datei <variant> |
||
| template< class T > struct variant_size; /* undefiniert */ |
(1) | (seit C++17) |
| template< class... Types > struct variant_size<std::variant<Types...>> |
(2) | (seit C++17) |
| template< class T > class variant_size<const T>; |
(3) | (seit C++17) |
| template< class T > class variant_size<volatile T>; |
(4) | (seit C++17) (veraltet in C++20) |
| template< class T > class variant_size<const volatile T>; |
(5) | (seit C++17) (veraltet in C++20) |
Ermöglicht den Zugriff auf die Anzahl der Alternativen in einem möglicherweise cv-qualifizierten Variant als konstanten Ausdruck zur Kompilierungszeit.
Formal,
2) erfüllt die UnaryTypeTrait-Anforderungen mit einer Basischarakteristik von std::integral_constant<std::size_t, sizeof...(Types)>
3-5) erfüllt die UnaryTypeTrait-Anforderungen mit einer Basischarakteristik von std::integral_constant<std::size_t, std::variant_size<T>::value>
Inhalt |
[bearbeiten] Hilfsvariablenschablone
| template< class T > constexpr std::size_t variant_size_v = std::variant_size<T>::value; |
(seit C++17) | |
Abgeleitet von std::integral_constant
Member-Konstanten
| value [static] |
sizeof...(Types) (öffentliche statische Member-Konstante) |
Memberfunktionen
| operator std::size_t |
konvertiert das Objekt in std::size_t, gibt value zurück (öffentliche Memberfunktion) |
| operator() (C++14) |
gibt value zurück (öffentliche Memberfunktion) |
Membertypen
| Typ | Definition |
value_type
|
std::size_t |
type
|
std::integral_constant<std::size_t, value> |
[bearbeiten] Hinweise
Alle Spezialisierungen von std::variant_size erfüllen die UnaryTypeTrait-Anforderungen mit der *Basischarakteristik* std::integral_constant<std::size_t, N> für ein bestimmtes N.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <any> #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() {}
[bearbeiten] Siehe auch
| erhält zur Kompilierzeit den Typ der durch ihren Index angegebenen Alternative (class template) (alias template) | |
| (C++11) |
ermittelt die Größe eines
|