Namespaces
Variants

std:: rank

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Défini dans l'en-tête <type_traits>
template < class T >
struct rank ;
(depuis C++11)

Si T est un type tableau, fournit la constante membre value égale au nombre de dimensions du tableau. Pour tout autre type, value vaut 0 .

Si le programme ajoute des spécialisations pour std::rank ou std::rank_v (depuis C++17) , le comportement est indéfini.

Table des matières

Modèle de variable d'assistance

template < class T >
constexpr std:: size_t rank_v = rank < T > :: value ;
(depuis C++17)

Hérité de std:: integral_constant

Constantes membres

value
[static]
le nombre de dimensions de T ou zéro
(constante membre publique statique)

Fonctions membres

operator std::size_t
convertit l'objet en std:: size_t , retourne value
(fonction membre publique)
operator()
(C++14)
retourne value
(fonction membre publique)

Types membres

Type Définition
value_type std:: size_t
type std:: integral_constant < std:: size_t , value >

Implémentation possible

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> {};

Exemple

#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}};
    // Le rang du type référence, par exemple ary[0], c'est-à-dire int(&)[3], est 0 :
    static_assert(std::rank_v<decltype(ary[0])> == 0);
    static_assert(std::is_same_v<decltype(ary[0]), int(&)[3]>);
    // La solution est de supprimer le type référence.
    static_assert(std::rank_v<std::remove_cvref_t<decltype(ary[0])>> == 1);
}

Voir aussi

(C++11)
vérifie si un type est un type tableau
(modèle de classe)
(C++11)
obtient la taille d'un type tableau selon une dimension spécifiée
(modèle de classe)
supprime une dimension du type tableau donné
(modèle de classe)
supprime toutes les dimensions du type tableau donné
(modèle de classe)