如何将函数应用于可变参数列表的每个组件并返回可变参数列表?

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函数而不修改其当前签名?)

Naw*_*waz 9

干得好:

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)

  • 非常感谢 !我期待一个庞大的程序,其中包含许多使用模板元编程的辅助类...我并不怀疑这种语法存在. (3认同)