gpt4 book ai didi

c++ - 使用枚举方向列表时反转方向(从左到右或从上到下)

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

我有一个这样声明的方向的枚举:

enum class ShootingDirection
{
Down,
Up,
Right,
Left
};

我还声明了该类型的类成员,其值需要在某些方法中交换或反转。交换或反转是指向下 -> 向上(反之亦然)和向右 -> 向左(同样,反之亦然)。

我使用了 std::map 而不是 switch 或一堆 if...else ifs 声明如下:

std::map<ShootingDirection, ShootingDirection> _invertedDirectionsMap;

它充满了这样的数据:

_invertedDirectionsMap[ShootingDirection::Down] = ShootingDirection::Up;
_invertedDirectionsMap[ShootingDirection::Up] = ShootingDirection::Down;
_invertedDirectionsMap[ShootingDirection::Right] = ShootingDirection::Left;
_invertedDirectionsMap[ShootingDirection::Left] = ShootingDirection::Right;

类型为 ShootingDirection 的变量的反转相当简单(假设它已初始化):

_direction = _invertedDirectionsMap[_direction];

我认为这是对 map 的愚蠢使用,也是不必要的开销。有没有更聪明的方法?

顺便问一下,这个问题属于代码审查还是这里?我不太熟悉这些标准。

最佳答案

我通常在一个圆圈中布置方向枚举(基本上匹配从 x 轴测量角度的方式。所以:

enum ShootingDirection { Right, Down, Left, Up };

匹配0度、90度、180度、270度。这(对我而言)使它成为一种直观的布局。

那么反转的方向就是:(dir + 2) % 4。或更完整:

int InvertDirection(int dir)
{
return (dir + 2) % 4;
}

我喜欢这个,因为我发现它使用起来相当直观。顺时针方向是 (dir + 1) % 4,逆时针方向是 (dir + 3) % 4

它也可以很容易地扩展到更多的方向。我将它用于六边形方向:反转方向现在是 (dir + 3) % 6

关于c++ - 使用枚举方向列表时反转方向(从左到右或从上到下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25597795/

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