我试图遵循并分解pacman克隆的源代码。我有一个if语句,令我感到困惑。

void PacMan::queueDirection(Direction dir)
{
    if (!directions.empty())
    {
        if (dir == -directions.front()) //this statement
        {
            std::queue<Direction> clear;
            std::swap(directions, clear);
        }
    }

    if(directions.size() < 2)
        directions.push(dir);
}
我的问题是-directions.front()的-infront做什么?方向是一个队列。是否会将front()返回的引用乘以-1?
感谢您的帮助-请在下面将链接发布到整个项目所在的github。
https://github.com/HexagonNico/Pac-Man/blob/master/PacMan.cpp如果让您喜欢。

最佳答案

您粘贴的代码似乎具有以下目的:
如果队列开头的Direction实例Directions是作为此函数的参数提供的值的负数,则清除队列,并将提供的参数排队。
在这种情况下,类型Direction是标题Directions.h中定义的枚举

enum Direction
{
    Up = 1,
    Down = -1,
    Left = 2,
    Right = -2,
    Unset = 0
};
在这种情况下,否定Direction实例,恰恰相反。
例如,假设在调用函数时,值Direction::Up位于队列的开头,并且函数的参数为​​Direction::Down。在这种情况下,队列方向将被清除。我添加了example来使这一点更清楚。

09-07 03:39