【发布时间】:2019-05-24 08:37:50
【问题描述】:
为了切入正题,我想使用if() 语句中的lambda 表达式返回true 或false。我看到这个问题与我的问题相似: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’
})
好的,阅读错误我认为我没有调用该函数,因为编译器不会将表达式视为布尔值。所以我尝试使用这段代码:
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,而不是调用它。尝试调用该函数。提示:
lack of ();) -
在那个地方定义一个 lambda 是没有意义的。在 if 表达式中,您应该直接执行比较表达式,不需要 lambda。您可以定义 lambda 并立即执行它,但这完全是晦涩难懂的编码,
-
为什么你不只是
return sqrt(pose(0) * pose(0) + pose(1) * pose(1)) < 2;没有不必要的? true : false? -
@aikhs - 您可能希望将该解释编辑到帖子中。否则你肯定会一遍又一遍地被问到这个问题。
-
@Klaus - 三个人很好地理解了 Q。这不是我们检查 OP 的“真实代码”的地方。他们减少了它(虽然可以减少更多),我们回答。