Как написать такую функцию, которая принимает несколько переменных аргументов и что-то с ними делает (например, суммирует их, если они одного типа)?
Например, фрагмент кода работает нормально:
auto someFunc = [](auto a, auto b) -> auto { return a + b; };
auto curry = [](auto func) -> auto
{
return [=](auto x) -> auto
{
return [=](auto y) -> auto { return x + y; };
};
};
Вызов этого с карри также работает:
std::cout << (someFunc)(10, 5) << std::endl;
std::cout << curry(someFunc)(10)(18) << std::endl;
Теперь, как сделать то же самое, если у somefunc () есть подпись следующего типа?
auto someFunc = [](auto... a, auto... b) -> auto { return ??? ; };
Если такого способа нет, можно ли это сделать с помощью C ++ 17 Fold ops?
Спасибо.