提问人:Olivier D'Ancona 提问时间:9/4/2021 更新时间:9/5/2021 访问量:288
如何在带有 lambda 表达式的类中使用 std::any_of?
How to use std::any_of inside a class with lambda expression?
问:
我正在用机器人用 c++ 编写一个小型模拟,我需要检查机器人是否发生碰撞。我在模拟类中实现了这个函数:
bool World::isRobotColliding(Robot *r) {
for (Robot *other_robot: robots) {
double d = distance(r->getX(), r->getY(), other_robot->getX(), other_robot->getY());
if ((r->getRadius() + other_robot->getRadius()) >= d) return true;
}
return false;
}
double World::distance(const double &x_1, const double &y_1, const double &x_2, const double &y_2) const {
return sqrt((x_1 - x_2) * (x_1 - x_2) + (y_1 - y_2) * (y_1 - y_2));
}
在这里,我的IDE建议我用std::any_of()方法替换for循环。但是,我无法正确使用它。这是我尝试过的:
return std::any_of(robots.begin(), robots.end(), [r, this](const Robot *&other_robot) {
return
(r->getRadius() + other_robot->getRadius())
>=
distance(r->getX(), r->getY(), other_robot->getX(), other_robot->getY());
});
如何在我的上下文中使用 std::any_of()?
谢谢
答:
0赞
Olivier D'Ancona
9/5/2021
#1
谢谢大家的建议,
问题出在通过引用传递的指针上。
return std::any_of(robots.begin(), robots.end(), [r, this](const Robot *other_robot) {
double d = distance(r->getX(), r->getY(), other_robot->getX(), other_robot->getY());
if(d == 0) return false;
return
(r->getRadius() + other_robot->getRadius())
>=
d;
});
这个片段完全符合我的期望。
我需要在上下文中传递第一个机器人以及.我本可以在我的机器人中声明一个距离函数并省略 .r
this
this
评论
const
Robot
Robot
r->distanceFrom(*other_robot)
distance()
static
this
isCollidingWith()
Robot
r->isCollidingWith(*other robot)