将双变量std :: function转换为单变量std :: function

Eli*_*iad 4 c++ lambda c++11

我有一个函数,它获取两个值,x和y,并返回结果:

std::function< double( double, double ) > mult = 
  []( double x, double y){ return x*y; };
Run Code Online (Sandbox Code Playgroud)

现在我想得到一个常量y的单变量函数.我编写了以下代码,但它不起作用.

std::function<
  std::function< double(double) > (
    std::function< double(double, double) >,
    double
  )
> funcYgivenX =
  [](std::function< double(double, double) > func2d, double inX) {
    return [&func2d, &inX]( double inY ) {
      return func2d(inX, inY);
    };
  };
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?什么是最好(最有效)的方法呢?

SU3*_*SU3 9

在C++ 11 std::bind中,基本上已经过时了,引入了lambdas.这是使用lambda绑定的示例.

int add(int a, int b) {return a + b;}

int main() {
  auto add2 = [](int a){ return add(a,2); };

  std::cout << add2(3) << std::endl; // prints 5
}
Run Code Online (Sandbox Code Playgroud)

关于lambdas优先于std::bind一个人的参考可以阅读Scott Meyers撰写的有效现代C++,第32项.在C++ 11中,不可能用lambda移动捕获,并且这种行为只能用它来模拟std::bind.通过在C++ 14中引入lambdas的init捕获,即使是那个角落的情况也可以通过lambdas很好地解决.