我想是這樣枚舉類型的任意整數值
enum EnumType {val1 = -1, val2 = 1};
enum EnumType2 {val1 = 1, val2 = -1};
尤其VAL1和val2取決於枚舉類型 - EnumType或EnumType2。
所以我最終還是希望能夠說類似
EnumType x = val1;
EnumType2 y = val1;
,並有X和Y具有不同的值。
上述可能嗎?
我想是這樣枚舉類型的任意整數值
enum EnumType {val1 = -1, val2 = 1};
enum EnumType2 {val1 = 1, val2 = -1};
尤其VAL1和val2取決於枚舉類型 - EnumType或EnumType2。
所以我最終還是希望能夠說類似
EnumType x = val1;
EnumType2 y = val1;
,並有X和Y具有不同的值。
上述可能嗎?
我可能是錯了,但我認爲在你的榜樣的模糊性可以用EnumType解決:: val1和EnumType2 :: VAL1
那麼,val1
和val2
是不明確的,(因爲他們可以指EnumType
)。你可以附上枚舉在namespace
或struct
,這樣你就可以區分它們是這樣的:
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;
若它們具有相同的名稱。如果你給他們一個不同的名字,你可以這樣做。下面是我通常聲明枚舉,使他們不衝突:
enum EnumType {et1_val1 = -1, et1_val2 = 1};
enum EnumType2 {et2_val1 = 1, et2_val2 = -1};
你可以使用任意整數值枚舉,但不能使用相同名稱的枚舉值。你必須給它們不同的名字,或者把它們放到不同的名字空間中。
是的,但val1
和val2
本身不能是整體類型。
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
,所以,如果他們真的是枚舉類型的全局對象可以用來改善這一點。
我認爲這將工作在C++ 0x,但不是在C++ 98/C++ 03。 – jamesdlin 2010-09-24 23:46:34
我在工作上做了很多工作。不幸的是,我現在回家了,無法檢查我正在使用的gcc的確切版本。根據C++ 98,我懷疑它不是標準的,所以它可能不是很便攜。 – JoshD 2010-09-25 00:46:41