Шаблоны - Найдите ранг массива - как работают шаблоныC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Шаблоны - Найдите ранг массива - как работают шаблоны

Сообщение Anonymous »

Я обнаружил и отлаживал код, чтобы найти ранг массива - пример Float [4], который имеет ранг 1. Аналогично Float [3] [2] имеет ранг 2 - где ранг означает измерение массива. < /p>
ниже - код, использующий Cppinsights: < /p>

Код: Выделить всё

#include 

template
struct Rank
{
inline static constexpr const size_t value = 0;
};

/* First instantiated from: insights.cpp:13 */
#ifdef INSIGHTS_USE_TEMPLATE
template
struct Rank
{
inline static constexpr const size_t value = 1U + Rank::value;
};

#endif
/* First instantiated from: insights.cpp:13 */
#ifdef INSIGHTS_USE_TEMPLATE
template
struct Rank
{
inline static constexpr const size_t value = 1U + Rank::value;
};

#endif
/* First instantiated from: insights.cpp:13 */
#ifdef INSIGHTS_USE_TEMPLATE
template
struct Rank
{
inline static constexpr const size_t value = 0;
};

#endif
/* First instantiated from: insights.cpp:18 */
#ifdef INSIGHTS_USE_TEMPLATE
template
struct Rank
{
inline static constexpr const size_t value = 1U + Rank::value;
};

#endif

template
struct Rank
{
inline static constexpr const size_t value = 1U + Rank::value;
};

int main()
{
/* PASSED: static_assert(Rank::value == 3); */
return 0;
}
Код работает нормально, но я не могу понять, как компилятор преобразует "rank " в "Rank " и n как 3 , как при ниже кода
n и n как 3 ниже.

Код: Выделить всё

template
struct Rank
{
inline static constexpr const size_t value = 1U + Rank::value;
};
< /code>
Для меня это больше похоже на строковое регулярное выражение, что делает сигнатура шаблона - первоначальное объявление было: < /p>
template 
struct Rank
{
static constexpr size_t value = 1U + Rank::value;
};
Так что это частичная специализация шаблона и экземпляр шаблона, такого как Rank , отображается с созданием экземпляров, например:

Код: Выделить всё

struct Rank
{
inline static constexpr const size_t value = 1U + Rank::value;
};
Но как Compiler способствует float [3] [2] [1] для ранга и выводит n как 3 - это точно так же, как декларация шаблона - rank [2] [2] [2] [1]>

Подробнее здесь: https://stackoverflow.com/questions/795 ... lates-work
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Понимание шаблонов деконструкции кода Java (JEP 405: шаблоны записей и шаблоны массивов)
    Anonymous » » в форуме JAVA
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Установите шаблоны и суб -шаблоны на веб -сайте React.js
    Anonymous » » в форуме Html
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Установите шаблоны и суб -шаблоны на веб -сайте React.js
    Anonymous » » в форуме Html
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Ранг и группировка в наборе данных Spark
    Гость » » в форуме JAVA
    0 Ответы
    38 Просмотры
    Последнее сообщение Гость
  • Аргументы «target» и «output» должны иметь одинаковый ранг (ndim).
    Anonymous » » в форуме Python
    0 Ответы
    303 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»