2010-09-24 130 views
0

我想是這樣枚舉類型的任意整數值

enum EnumType {val1 = -1, val2 = 1}; 
enum EnumType2 {val1 = 1, val2 = -1}; 

尤其VAL1和val2取決於枚舉類型 - EnumType或EnumType2。

所以我最終還是希望能夠說類似

EnumType x = val1; 
EnumType2 y = val1; 

,並有X和Y具有不同的值。

上述可能嗎?

回答

0

我可能是錯了,但我認爲在你的榜樣的模糊性可以用EnumType解決:: val1和EnumType2 :: VAL1

+1

我認爲這將工作在C++ 0x,但不是在C++ 98/C++ 03。 – jamesdlin 2010-09-24 23:46:34

+1

我在工作上做了很多工作。不幸的是,我現在回家了,無法檢查我正在使用的gcc的確切版本。根據C++ 98,我懷疑它不是標準的,所以它可能不是很便攜。 – JoshD 2010-09-25 00:46:41

1

那麼,val1val2是不明確的,(因爲他們可以指EnumType)。你可以附上枚舉在namespacestruct,這樣你就可以區分它們是這樣的:

namespace enums1 
{ 
enum EnumType {val1 = -1, val2 = 1}; 
} 

namespace enums2 
{ 
enum EnumType {val1 = 1, val2 = -1}; 
} 

所以你可以然後說:

enums1::EnumType x = enums1::val1; 
enums2::EnumType y = enums2::val1; 
0

若它們具有相同的名稱。如果你給他們一個不同的名字,你可以這樣做。下面是我通常聲明枚舉,使他們不衝突:

enum EnumType {et1_val1 = -1, et1_val2 = 1}; 
enum EnumType2 {et2_val1 = 1, et2_val2 = -1}; 
0

你可以使用任意整數值枚舉,但不能使用相同名稱的枚舉值。你必須給它們不同的名字,或者把它們放到不同的名字空間中。

0

是的,但val1val2本身不能是整體類型。

enum EnumType { et1_val1 = -1, et1_val2 = 1 }; 
enum EnumType2 { et2_val1 = 1, et2_val2 = -1 }; 

struct value_depends_on_conversion { 
    EnumType enum1_value; 
    EnumType2 enum2_value; 

    operator EnumType() const 
     { return enum1_value; } 

    operator EnumType2() const 
     { return enum2_value; } 

} const val1 = { et1_val1, et2_val1 }, 
     val2 = { et1_val2, et2_val2 }; 

的C++ 0x將通過允許轉換被標記constexpr,所以,如果他們真的是枚舉類型的全局對象可以用來改善這一點。