«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Можно ли использовать метапрограммирование C ++ для динамического создания статических массивов времени компиляции?

Можно ли использовать метапрограммирование C ++ для динамического создания статических массивов времени компиляции?

Опубликовано в 2025-02-06
Просматривать:945

Can C   Metaprogramming Be Used for Dynamically Creating Compile-Time Static Arrays?

программно создавая статические массивы во время компиляции в C

проблема Введение

Традиционно, статические массивы в C могут быть определены во время компиляции с использованием фиксированного- размеры массивы. Однако для определенных сценариев может быть желательно назначать значения программно во время компиляции. В этой статье исследуются методы метапреграммирования для достижения такого динамического создания статических массивов. Вариадический список аргументов. Этот обходной путь имеет ограничения из -за максимальной глубины экстремения шаблона.

Вопрос 2: Назначение селективного значения

для избирательного назначения значений во время компиляции можно использовать комбинацию шаблонов вариада и метафукций. Шаблон MetaFunc служит пакетом параметров, который генерирует последовательность значений на основе его индекса. Шаблон Generate_Array может затем создать массив желаемого размера, используя сгенерированные значения.

пример реализации

шаблон struct metafunc {enum {value = index 1}; }; шаблон класс f & gt; struct generate_array { typedef typename generate_array_impl :: result result; }; Шаблон класс F, Unsigned ... args & gt; struct generate_array_impl { typedef typename generate_array_impl :: value, args ...> :: result result; }; Шаблон класс F, Unsigned ... args & gt; struct generate_array_impl :: value, args ... & gt; результат; }; шаблон & lt; unsigned ... args & gt; struct Arrayholder { Статические константы без знака данных [sizeof ... (args)]; }; шаблон & lt; unsigned ... args & gt; Const unsigned Arrayholder & lt; args ... & gt; :: data [sizeof ... (args)] = {args ...};

пример использования

template struct MetaFunc { enum { value = index   1 }; };

template class F> 
struct generate_array {
    typedef typename generate_array_impl::result result;
};

template class F, unsigned... args> 
struct generate_array_impl {
    typedef typename generate_array_impl::value, args...>::result result;
};

template

Этот пример определяет статический массив размера 5 со значениями {1, 2, 3, 4, 5}, назначенного во время компиляции с использованием метафункции MetaFunc.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3