all_of询问参数列表

时间:2015-04-05 09:04:52

标签: c++

在尝试再次使用all_of后,我再次尝试。

if (all_of(Enemies.begin(), Enemies.end(), in_lock_range))
            {
                lock_on = -1;
            }

载体是:

std::vector<Enemy> Enemies;

功能是:

bool Player::in_lock_range(Enemy arg)
{
    if (get_distance(mouseTarget.x, mouseTarget.y, arg.x, arg.y) > arg.erect.r) return true;
    else return false;
}

get_distance(x1,x2,y1,y2)返回2点的距离

Enemy是玩家的朋友类,反之亦然,所以他们可以自由地使用彼此的东西。

我收到的错误是

error C3867: 'Player::in_lock_range': function call missing argument list; use '&Player::in_lock_range' to create a pointer to member

我不确定为什么他显然是因为in_lock_range而不是因为我不相信它在all_of中需要任何东西,因为我在不同的情况下使用它而没有这样的问题。

任何人都可以向我解释一下这可能是什么原因?我对此并不是很有经验。感谢。

1 个答案:

答案 0 :(得分:0)

它是一个成员函数,因此获取指针的语法是

&Player::in_lock_range

仅当它是静态成员时才可用,因为它必须只用一个参数来调用。我猜测它不是 - 大概mouseTargetPlayer的非静态数据成员。在这种情况下,您必须将其绑定到某个玩家对象:

bind(&Player::in_lock_range, std::ref(some_player), std::placeholders::_1)

或将其包装在lambda中:

[&](const Enemy& e){return some_player.in_lock_range(e);}

函数应该通过常量引用而不是值来获取其参数;你可能想简化return语句

if (whatever) return true;
else return false;

更具可读性

return whatever;