Как перебрать шаблон с переменным числом аргументов?
Как перебрать шаблон с переменным числом аргументов? грубо говоря есть функция
template <typname... T>
void test(T1... args)
{
}
Как мне перебрать args?
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Вот так. Это называется fold expression.
#include <iostream>
template <typename... T>
void test(T ...args)
{
([&]{
std::cout << args << '\n';
}(), ...);
}
int main()
{
test(1, 2, 3);
}
Лямбда вызывается N раз. Внутри нее args ссылается на очередной элемент args....
В fold expression вместо , может быть любой бинарный оператор, например +.
Т.е. сумму всех аргументов можно получить так: return (args + ...);, или, если нужно, чтобы это работало для 0 аргументов, то так: return (args + ... + 0);.
Какая-то версия MSVC у меня давилась синтаксисом выше, но сейчас повторить не получается. Как обходной вариант работала лямбда с параметром ([&](auto x){...}(args), ...).