首页 > 解决方案 > 为什么我的 lambda 函数没有被执行?

问题描述

我有以下函数,这是由 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。

但我没有看到将正确的值传递给函数体。

有什么额外的事情需要做吗?

标签: c++lambda

解决方案


你有无状态的 lambda。

无状态 lambda 可以转换为指向函数的指针。因此,您的 lambda 被转换为void (*)(int),并且该指针被分配bool给 always 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;

推荐阅读