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 に答える