2011-11-20 84 views
1

我在C++中創建一個俄羅斯方塊克隆,我有一個枚舉GameProperty,其規定如下:有重複的枚舉值

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

就我而言,我只有使用這些值循環時通過四格拼板的瓷磚,如:

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


它是下認爲是不好的做法,任何情況下,有多個具有相同值的枚舉器?

+0

http://stackoverflow.com/questions/5561142/duplicate-enum-values-in-c可能的重複 – bames53

回答

7

這些不應該是單個enum中的值。它們應該是單獨的常量。要了解原因,請查看i < TETROMINO_TILES之類的代碼。將integerGameProperty進行比較,其可以具有像TETROMINO_ROTATIONS那樣的值。這是沒有意義的。

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; 
}; 
0

定義枚舉就像你定義一個類。它在概念上應該是一個屬性值的集合,而不是多個綁定的屬性。