Vin*_*ent 9 c++ templates metaprogramming variadic-templates c++11
以下教学示例说明了我的问题:
#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;
}
Run Code Online (Sandbox Code Playgroud)
如何通过将函数应用于每个组件并返回修改后的可变参数列表来"转换"可变参数列表?(有没有办法编写applybis函数而不修改其当前签名?)
干得好:
return f(std::sin(args)...);
Run Code Online (Sandbox Code Playgroud)
那就是...应该来的(args).
它扩展/解压缩到这种形式:
return f( std::sin(arg0), std::sin(arg1), ......, std::sin(argN) );
Run Code Online (Sandbox Code Playgroud)