Combining std::function objects

核能气质少年 提交于 2019-12-20 03:21:08

问题


Say I have

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

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

which works fine for the (more complicated) purposes I use this structure, up till now. Now I have a function that accepts a std::function of the above form and I need to create a new std::function that extends the original:

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?
    ...
}

So the mathematical equivalent is:

f(x) = x²

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

How can I accomplish this? Thanks for the help!


回答1:


Since you are using C++0x already, why not just use the lambda expression?

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

Edit: Using 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));
}


来源:https://stackoverflow.com/questions/4008369/combining-stdfunction-objects

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!