c++ - 为什么我的 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。
但我没有看到将正确的值传递给函数体。
有什么额外的事情需要做吗?
解决方案
你有无状态的 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;
推荐阅读
- javascript - 从 Keras 到 Tensorflowjs 的标记器
- spring-boot - 如何将服务调用注入另一个方法?
- javascript - 如何使用ajax和JSP实时更新表格
- pandas - 当我只想添加两个值并设置其余的空白时,如何向数据框添加新行?
- c - 为什么 MSVC 不在生成的汇编代码中分配 32 字节的影子空间?
- json - 如何使用 YouTube API 提取视频标题和下一页令牌?
- ios - MZInAppLockerAccessException(状态 21010)Apple verifyReceipt 端点异常应用内购买订阅
- javascript - 在反应中将json转换为Formdata
- azure - 同时部署到触发器的管道失败?
- python - 在多个文件中使用正则表达式计算多个字符串