Традиционно, статические массивы в C могут быть определены во время компиляции с использованием фиксированного- размеры массивы. Однако для определенных сценариев может быть желательно назначать значения программно во время компиляции. В этой статье исследуются методы метапреграммирования для достижения такого динамического создания статических массивов. Вариадический список аргументов. Этот обходной путь имеет ограничения из -за максимальной глубины экстремения шаблона.
для избирательного назначения значений во время компиляции можно использовать комбинацию шаблонов вариада и метафукций. Шаблон MetaFunc служит пакетом параметров, который генерирует последовательность значений на основе его индекса. Шаблон Generate_Array может затем создать массив желаемого размера, используя сгенерированные значения.
шаблон
templatestruct 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 class F, unsigned... args> struct generate_array_impl::value, args...> result; }; template<unsigned... args> struct ArrayHolder { static const unsigned data[sizeof...(args)]; }; template<unsigned... args> const unsigned ArrayHolder<args...>::data[sizeof...(args)] = { args... };
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3