Spec-Zone.ru › C++

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]]

См. также

is_array_type
(C++26)
проверяет, является ли отражённый тип типом массива
(функция)
extent
(C++26)
получает размер отражённого типа массива вдоль указанного измерения
(функция)
remove_extent
(C++26)
удаляет один размер массива из отражённого типа массива
(функция)
remove_all_extents
(C++26)
удаляет все размеры массива из отражённого типа массива
(функция)
rank
(C++11)
получает количество измерений типа массива
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/meta/rank

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API