std::meta::rank
Определено в заголовочном файле <meta> | ||
|---|---|---|
consteval std::size_t rank( std::meta::info r ); | (начиная с C++26) |
Возвращает количество измерений отражённого типа массива, представленного отражением r.
Эквивалентно return std::rank<T>::value, где T — тип, представленный с помощью std::meta::dealias(r).
Параметры
| r | - | значение отражения |
Возвращаемое значение
Количество измерений массива.
Исключения
std::meta::exception, если r не представляет тип массива.
Пример
#include <meta>
#include <print>
static_assert(std::meta::rank(^^int) == 0);
static_assert(std::meta::rank(^^int[5]) == 1);
static_assert(std::meta::rank(^^int[5][5]) == 2);
static_assert(std::meta::rank(^^int[][5][5]) == 3);
int main()
{
int a[][3]{ {1, 2, 3} };
std::println("{}", a);
// The rank of reference type, e.g., a[0], that is int(&)[3], is 0:
static_assert(std::meta::rank(^^decltype(a[0])) == 0);
static_assert(std::meta::is_same_type(^^decltype(a[0]), ^^int(&)[3]));
// The solution is to remove the reference type.
static_assert(std::meta::rank(std::meta::remove_cvref(^^decltype(a[0]))) == 1);
}
Вывод:
[[1, 2, 3]]
См. также
|
(C++26) | проверяет, является ли отражённый тип типом массива (функция) |
|
(C++26) | получает размер отражённого типа массива вдоль указанного измерения (функция) |
|
(C++26) | удаляет один размер массива из отражённого типа массива (функция) |
|
(C++26) | удаляет все размеры массива из отражённого типа массива (функция) |
|
(C++11) | получает количество измерений типа массива (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/rank