具有重复的枚举器值

时间:2011-11-20 00:47:24

标签: c++ enums

我正在用C ++创建一个俄罗斯方块克隆,我有一个枚举GameProperty,具体如下:

enum GameProperty {
    NUM_OF_TETROMINOES  = 7,
    NUM_OF_TILES        = 4,
    TETROMINO_ROTATIONS = 4
};

在我的情况下,我在循环通过tetromino的磁贴时使用这些值,例如:

for (int i = 0; i < TETROMINO_TILES; i++) { }


在任何具有相同价值的多个普查员的情况下,是否认为是不良做法?

3 个答案:

答案 0 :(得分:7)

这些不应该是单个enum中的值。它们应该是独立的常量。要了解原因,请查看代码i < TETROMINO_TILES。将integerGameProperty进行比较,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循环和表达式中使用而无需转换。

另一个示例,以下内容均正确,但不应在enumint之间进行交换:

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属性的值集合,而不是绑定的多个属性。