Hodnost (počítačové programování) - Rank (computer programming)

V počítačovém programování je pozice bez dalších specifikací obvykle synonymem pro (nebo odkazuje na) „počet dimenzí“; tedy dvourozměrné pole má pořadí dvě , trojrozměrné pole má pořadí tři a tak dále. Přísně nelze poskytnout žádnou formální definici, která by platila pro každý programovací jazyk , protože každý z nich má své vlastní koncepty, sémantiku a terminologii; tento výraz nemusí být ani použitelný, nebo naopak může být použit v kontextu daného jazyka s velmi konkrétním významem.

V případě APL se tento pojem vztahuje na každý operand; a dyady („binární funkce“) mají levou a pravou pozici .

Níže uvedené pole ukazuje, jak lze definovat pořadí typu a pořadí výrazu pole (v semi-formálním stylu) pro C ++, a ilustruje jednoduchý způsob, jak je vypočítat v době kompilace.

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

Vzhledem k výše uvedenému kódu lze hodnost typu T vypočítat v době kompilace pomocí

rank<T>::value

nebo kratší forma

rank_v<T>

Výpočet pořadí výrazu lze provést pomocí

rankof(expr)

Viz také