我有一个函数,它获取两个值,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)
我在这做错了什么?什么是最好(最有效)的方法呢?
在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很好地解决.
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |