我有以下功能,这是由main调用的。但是我看不到执行lambda函数。
int LambdaTest(int x, int y, bool bLambda) {
cout << "Lambda Rxd : " << bLambda << endl;
if (bLambda) {
return x + y;
} else {
return ((x > y) ? (x - y) : (y - x));
}
}
int main() {
int x = 10, y = 30;
int val = -1;
val = LambdaTest(x, y, [](int x) -> bool {
return x > 15;
});
cout << "Lambda test 1: " << val << endl;
val = LambdaTest(x, y, [](int y) -> bool {
return y > 15;
});
cout << "Lambda test 2: " << val << endl;
return 0;
}
在这个主要函数中,我期望作为函数调用的第三个参数传递的lambda函数将执行并返回true或false。
但是我看不到正确的值传递给函数主体。
还有什么需要做的吗?
答案 0 :(得分:1)
您有无状态的lambda。
无状态lambda可以转换为函数指针。因此,您的lambda会转换为void (*)(int)
,并且此指针分配给bool
,从而始终得到true
。
要“即时”调用lambda,您需要添加带有参数的()
:
val = LambdaTest(x, y, [](int x) -> bool {
return x > 15;
}(x) ); // <---
cout << "Lambda test 1: " << val << endl;
val = LambdaTest(x, y, [](int y) -> bool {
return y > 15;
}(y) ); // <---
[](){} -> bool ( /*here passed arguments */ );
另一种解决方案是将lambda表达式生成的函子存储在某个变量中,然后在该对象上应用()
:
auto l1 = [](int x) -> bool {
return x > 15;
};
val = LambdaTest(x, y, l1(x));
cout << "Lambda test 1: " << val << endl;