std::rank
De cppreference.com
| Definido en el archivo de encabezado <type_traits>
|
||
template< class T >
struct rank;
|
(desde C++11) | |
Si T es un tipo array, proporciona la constante miembro value igual al número de dimensiones del array. Para cualquier otro tipo, value es 0.
El comportamiento de un programa que añade especializaciones para rank o rank_v (desde C++17) no está definido.
Plantilla de variable auxiliar
template< class T >
inline constexpr std::size_t rank_v = rank<T>::value;
|
(desde C++17) | |
Heredado de std::integral_constant
Constantes miembro
value [estático] |
el número de dimensiones de T o cero (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>
|
Posible implementación
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> {};
|
Ejemplo
Ejecuta este código
#include <iostream>
#include <type_traits>
int main()
{
std::cout << std::rank<int>{} << "\n\n";
std::cout << std::rank<int[5]>{} << '\n';
std::cout << std::rank<int[5][5]>{} << '\n';
std::cout << std::rank<int[][5][5]>{} << '\n';
}
Salida:
0
1
2
3
