9

以下教学示例说明了我的问题:

#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 函数?)

4

1 回答 1

9

干得好:

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

也就是说,...应该在之后(args)

它扩展/解包为这种形式:

return f( std::sin(arg0), std::sin(arg1), ......, std::sin(argN) );
于 2012-11-20T20:02:23.537 回答