std:: rank
From cppreference.net
C++
Metaprogramming library
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert im Header
<type_traits>
|
||
|
template
<
class
T
>
struct rank ; |
(seit C++11) | |
Falls
T
ein Array-Typ ist, liefert die Member-Konstante
value
gleich der Anzahl der Dimensionen des Arrays. Für jeden anderen Typ ist
value
gleich
0
.
Falls das Programm Spezialisierungen für
std::rank
oder
std::rank_v
(seit C++17)
hinzufügt, ist das Verhalten undefiniert.
Inhaltsverzeichnis |
Hilfsvariablen-Template
|
template
<
class
T
>
constexpr std:: size_t rank_v = rank < T > :: value ; |
(seit C++17) | |
Geerbt von std:: integral_constant
Member-Konstanten
|
value
[static]
|
die Anzahl der Dimensionen von
T
oder null
(öffentliche statische Member-Konstante) |
Member-Funktionen
|
operator std::size_t
|
konvertiert das Objekt zu
std::
size_t
, gibt
value
zurück
(öffentliche Member-Funktion) |
|
operator()
(C++14)
|
gibt
value
zurück
(öffentliche Member-Funktion) |
Member-Typen
| Typ | Definition |
value_type
|
std:: size_t |
type
|
std:: integral_constant < std:: size_t , value > |
Mögliche Implementierung
template<class T> struct rank : public std::integral_constant<std::size_t, 0> {}; template<class T> struct rank<T[]> : public std::integral_constant<std::size_t, rank<T>::value + 1> {}; template<class T, std::size_t N> struct rank<T[N]> : public std::integral_constant<std::size_t, rank<T>::value + 1> {}; |
`-Tags wurde gemäß den Anweisungen nicht übersetzt, da es sich um C++-Code handelt. Die HTML-Struktur und -Attribute bleiben ebenfalls unverändert.
Beispiel
Diesen Code ausführen
#include <type_traits> static_assert(std::rank<int>{} == 0); static_assert(std::rank<int[5]>{} == 1); static_assert(std::rank<int[5][5]>{} == 2); static_assert(std::rank<int[][5][5]>{} == 3); int main() { [[maybe_unused]] int ary[][3] = {{1, 2, 3}}; // Der Rang des Referenztyps, z.B. ary[0], also int(&)[3], ist 0: static_assert(std::rank_v<decltype(ary[0])> == 0); static_assert(std::is_same_v<decltype(ary[0]), int(&)[3]>); // Die Lösung besteht darin, den Referenztyp zu entfernen. static_assert(std::rank_v<std::remove_cvref_t<decltype(ary[0])>> == 1); }
Siehe auch
|
(C++11)
|
prüft, ob ein Typ ein Array-Typ ist
(Klassentemplate) |
|
(C++11)
|
ermittelt die Größe eines Array-Typs entlang einer bestimmten Dimension
(Klassentemplate) |
|
(C++11)
|
entfernt eine Dimension vom gegebenen Array-Typ
(Klassentemplate) |
|
(C++11)
|
entfernt alle Dimensionen vom gegebenen Array-Typ
(Klassentemplate) |