Как применить функцию к каждому компоненту списка переменных и вернуть список переменных?

Следующий дидактический пример иллюстрирует мою проблему:

#include <iostream>
#include <cmath>

template<class Function, class... Args>
double apply(Function f, Args... args)
{
return f(args...);
}

template<class Function, class... Args>
double applybis(Function f, Args... args)
{
return f(std::sin(args...));// <- How to apply a function to
// each variadic parameter and
// return a modified variadic list ?
}

int main(int argc, char* argv[])
{
std::cout<<apply(static_cast<double(*)(double)>(std::sin), 3.)<<std::endl;
return 0;
}

Как «преобразовать» список переменных, применяя функцию к каждому компоненту и возвращая измененный список переменных?
(Есть ли способ написать функцию applybis без изменения ее текущей подписи?)

9

Решение

Ну вот:

return f(std::sin(args)...);

То есть, ... должен прийти после (args),

Это расширяет / распаковывает в эту форму:

return f( std::sin(arg0), std::sin(arg1), ......, std::sin(argN) );
9

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector