组合std :: function对象

时间:2010-10-24 13:19:23

标签: c++ c++11 functional-programming

说我有

double xSquared( const double )
{
    return x*x;
}

...
std::function<double (double)> func = &xSquared;
...

这对于我使用这种结构的(更复杂的)目的来说很好,直到现在。现在我有一个接受上述形式的std :: function的函数,我需要创建一个扩展原始的新的std :: function:

typedef std::function<double (double)> func1D;

double someFunction( const func1D &func, const double a )
{
    func1D extendedFunc = func/(x-a); // I know this is incorrect, but how would I do that?
    ...
}

所以数学等价物是:

  

f(x)=x²

     

g(x)= f(x)/(x-a)

我怎样才能做到这一点?谢谢你的帮助!

1 个答案:

答案 0 :(得分:8)

由于您已经在使用C ++ 0x,为什么不使用lambda表达式?

func1D divideByXMinusA(const func1D& f, double a) {
    return [=](double x) { return f(x)/(x-a); };
}

修改:使用std::bind

func1D divideByXMinusA_withBind(const func1D& f, double a) {
    using namespace std::placeholders;
    return std::bind(std::divides<double>(),
                          std::bind(f, _1),
                          std::bind(std::minus<double>(), _1, a));
}