我正在用C ++创建一个俄罗斯方块克隆,我有一个枚举GameProperty
,具体如下:
enum GameProperty {
NUM_OF_TETROMINOES = 7,
NUM_OF_TILES = 4,
TETROMINO_ROTATIONS = 4
};
在我的情况下,我仅在循环通过tetromino的磁贴时使用这些值,例如:
for (int i = 0; i < TETROMINO_TILES; i++) { }
在任何具有相同价值的多个普查员的情况下,是否认为是不良做法?
答案 0 :(得分:7)
这些不应该是单个enum
中的值。它们应该是独立的常量。要了解原因,请查看代码i < TETROMINO_TILES
。将integer
与GameProperty
进行比较,TETROMINO_ROTATIONS
可以包含{{1}}等值。这毫无意义。
答案 1 :(得分:1)
如果要创建一个新的,不同的类型,不是实际上是标量值,请使用enum
。例如,颜色可以枚举,因此编号,但这些数字实际上并不意味着什么。
如果您为调查员分配了有意义的数字,那么这表明您可能真的需要这样的内容:
namespace GameProperty { // completely different concepts with unifying theme
int const num_tetrominoes = 7,
num_tiles = 4,
num_rotations = 4;
};
现在您可以使用相同的语法以及using
声明,并且这些常量可以在for
循环和表达式中使用而无需转换。
另一个示例,以下内容均正确,但不应在enum
和int
之间进行交换:
namespace wavelengths { // closely related quantities
typedef int wavelength_t; // maybe we will express in-between values
wavelength_t const red = 750,
green = 550,
blue = 400;
};
enum colors { // qualitatively different but related as one-of-many
red,
green,
blue;
};
答案 2 :(得分:0)
定义一个枚举,就像定义一个类一样。它在概念上应该是ONE属性的值集合,而不是绑定的多个属性。