gpt4 book ai didi

c++ - Lambda 表达式在 if 语句中返回 bool

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:33 24 4
gpt4 key购买 nike

直截了当,我想在 if() 语句中使用 lambda 表达式返回 truefalse。我看到这个问题与我有类似的问题:LINK但我找不到答案。

所以这是我的示例代码:

if([&rel_pose](Eigen::VectorXd pose)
{
return (sqrt(pose(0) * pose(0) + pose(1) * pose(1)) < 2) ? true : false;
}) // do smth

当我尝试编译时出现此错误:

 error: could not convert ‘<lambda closure object>graphslam::GraphSLAM::main_pose_callback(const ConstPtr&)::<lambda(Eigen::VectorXd)>{rel_pose}’ from ‘graphslam::GraphSLAM::main_pose_callback(const ConstPtr&)::<lambda(Eigen::VectorXd)>’ to ‘bool’
})

好的,阅读错误我认为我没有调用该函数,因为编译器不会将表达式视为 bool。所以我尝试使用这段代码:

if(([&rel_pose](Eigen::VectorXd pose)
{
return (sqrt(pose(0) * pose(0) + pose(1) * pose(1)) < 2) ? true : false;
};)) // do smth

错误:

expected ‘)’ before ‘;’ token
};)) return;

这可能看起来像是一个明显的错误,但对我来说,我可能没有正确理解语法并想问问发生了什么。

编辑:请注意,我已经简化了代码,因此您可以轻松地重现错误。我知道在这种特殊情况下,lambda 表达式没有任何意义。

最佳答案

你忘了调用你的 lambda。现在你说 if(function_pointer)因此编译器无法将其转换为 bool 表达式。


一个简单的if因此,带有 bool lambda 的子句写成:

if ([]() {
return true;
}()) {
//do sth
}

在捕获变量的同时将变量作为参数也会出错。你必须做出决定,所以要么:

if([](Eigen::VectorXd pose)
{
return (sqrt(pose(0) * pose(0) + pose(1) * pose(1)) < 2) ? true : false;
}(rel_pose)){
//do sth
}

if([&rel_pose]()
{
return (sqrt(rel_pose(0) * rel_pose(0) + rel_pose(1) * rel_pose(1)) < 2) ? true : false;
}()){
//do sth
}

在这种情况下,是否需要 lambda 是有问题的,您可以去掉 lambda,在 if 子句中留下 bool 表达式。谈论它时 - 无需在此处使用三元运算符。 return sqrt(rel_pose(0) * rel_pose(0) + rel_pose(1) * rel_pose(1)) < 2;足够且更具可读性。

关于c++ - Lambda 表达式在 if 语句中返回 bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56288821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com