Для этого потребуется нечто, называемое a, template for
которое будут принимать ожидаемые операторы раскрытия формы , что выглядит как цикл for, но в действительности это шаблонный блок в функции, которая создается несколько раз.
Конечно, есть обходной путь. Мы можем использовать общие лямбды, чтобы объявить какой-то локальный шаблонный блок и создать его сами:
template <typename T, T... S, typename F>
constexpr void for_sequence(std::integer_sequence<T, S...>, F f) {
(static_cast<void>(f(std::integral_constant<T, S>{})), ...);
}
Эта функция принимает целочисленную последовательность и создает лямбду F
столько раз, сколько длина последовательности.
Используется так:
for_sequence(std::make_index_sequence<100>(), [](auto N) { /* N is from 0 to 99 */
A<N + 1> a; /* N + 1 is from 1 to 100 */
a.functionCalls();
});
Здесь N
можно отправить как параметр шаблона, потому что это объект, у которого есть оператор преобразования constexpr в целочисленный тип. Точнее, это std::integral_constant
с возрастающей ценностью.
Живой пример
N
необходимоconstexpr
если это переменная цикла, это не так