Ранг (компьютерное программирование)
В компьютерном программировании ранг без каких-либо дополнительных спецификаций обычно является синонимом (или относится к) «количества измерений»; таким образом, двумерный массив имеет ранг два , трехмерный массив — третий и так далее. Строго говоря, невозможно дать формальное определение, применимое к каждому языку программирования , поскольку каждый из них имеет свои собственные концепции, семантику и терминологию; этот термин может даже быть неприменим или, наоборот, применяться с весьма конкретным значением в контексте данного языка.
В случае APL это понятие применимо к каждому операнду; а диады («бинарные функции») имеют левый и правый ранги .
Вместо этого в блоке ниже показано, как можно определить ранг типа и ранг выражения массива (в полуформальном стиле) для C++, и иллюстрируется простой способ их вычисления во время компиляции.
#include <type_traits>
#include <cstddef>
/* Rank of a type
* -------------
*
* Let the rank of a type T be the number of its dimensions if
* it is an array; zero otherwise (which is the usual convention)
*/
template <typename T> struct rank
{
static const std::size_t value = 0;
};
template<typename T, std::size_t N>
struct rank<T[N]>
{
static const std::size_t value = 1 + rank<T>::value;
};
template <typename T>
constexpr auto rank_v = rank<T>::value;
/* Rank of an expression
*
* Let the rank of an expression be the rank of its type
*/
template <typename T>
using unqualified_t = std::remove_cv_t<std::remove_reference_t<T>>;
template <typename T>
auto rankof(T&& expr)
{
return rank_v<unqualified_t<T>>;
}
Учитывая код выше ранга типа T, его можно вычислить во время компиляции с помощью
rank<T>::value
или более короткая форма
rank_v<T>
Вычислить ранг выражения можно с помощью
rankof(expr)
См. также
[ редактировать ]- Ранг (линейная алгебра) для определения ранга применительно к матрицам.
- Ранг (язык программирования J) — одноименное понятие в языке программирования J.