我有一个函数,它获取两个值 x 和 y,并返回结果:
std::function< double( double, double ) > mult =
[]( double x, double y){ return x*y; };
现在我想得到一个常量 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);
};
};
我在这里做错了什么?最好(最有效)的方法是什么?
在 C++11 中,std::bind
随着引入的lambdas http://en.cppreference.com/w/cpp/language/lambda。
下面是使用 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
}
供有关 lambda 优先级的参考std::bind
一个人可以阅读有效的现代 C++作者:Scott Meyers,第 32 条。在 C++11 中,不可能使用 lambda 移动捕获,并且只能使用以下命令来模拟此行为std::bind
。通过在 C++14 中引入 lambda 的 init 捕获,即使是这种极端情况也可以使用 lambda 很好地解决。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)