2012-09-05 142 views
3

有一個現有枚舉地圖一個枚舉另一個枚舉

typedef enum 
{ 
    myEnum_front = 11, 
    myEnum_back = 19 
} myEnumSides; 

我想創建另一個枚舉new_myEnumSides,它的價值應該被映射到爲myEnumSides值。因此,我會使用new_myEnumSides而不是myEnumSides。 爲此目的,代碼是否正確?

typedef enum 
{ 
    new_myEnum_front = myEnumSides::myEnum_front, 
    new_myEnum_back = myEnumSides::myEnum_back 
} new_myEnumSides; 

或者還有更好的方法嗎?

+3

我能問你爲什麼要這樣做嗎? – Aesthete

+0

新的枚舉將用於可能會暴露給客戶的層中。 – ontherocks

+1

看起來沒問題,只是'typedef'語法是不必要的:'enum myEnumSides {....};'。另外,'::'語法只適用於C++ 11類的枚舉。令人討厭的C++ 03枚舉值生活在全局命名空間中。 – juanchopanza

回答

1

我不可能想象爲什麼你需要做...如果你不需要重命名枚舉的值,你可以做第一個的另一個變量,無需添加其他枚舉(我相信這不是你的情況,但還是要指出這個機會):

typedef enum 
{ 
    myEnum_front = 11, 
    myEnum_back = 19 
} myEnumSides, new_myEnumSides;//<-- just add the new variable here 

如果想重新命名它(我相信,你的情況下),你應該不是使用::運營商,而只是寫:

typedef enum 
{ 
    myEnum_front = 11, 
    myEnum_back = 19 
} myEnumSides; 

typedef enum 
{ 
    new_myEnum_front = myEnum_front, 
    new_myEnum_back = myEnum_back 
} new_myEnumSides; 

::經營者應使用只有當枚舉是一個類,結構或命名空間內,否則不需要::

+0

第一個示例具有誤導性,因爲它不會將一個枚舉值賦給另一個枚舉值。它爲相同的無名枚舉創建兩個typedef。 – juanchopanza

+0

@娟,編輯答案使其更加清晰 – SingerOfTheFall

0

我可以想象你想要這樣做的唯一原因是擴展現有enum並創建一個具有額外值的新的。

由於enum不提供任何形式的繼承,是編譯時間常數和真的只是整數,您可以這樣的事情,雖然我不特別推薦它..

// internalEnums.h 
myEnum_front = 11, 
myEnum_back = 19 

// customerEnums.h 
someNewValue = 20, 
someOtherNewValue = 21 

// Wherever you want to define your enums 
typedef enum 
{ 
    #include "customerEnums.h" 
} customerAccessible; 

typedef enum 
{ 
    #include "internalEnums.h" 
    #include "customerEnums.h" 
} internalUseOnly; 

// Now there are two enumerations, sharing items. 
customerAccessible::someNewValue // 11 
customerAccessible::myEnum_front; // Doesn't exist 

編輯根據您的評論,您可以通過將值保存在專門用於外部使用的標頭中來向客戶公開枚舉。

相關問題