2010-09-24 87 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,所以,如果他们真的是枚举类型的全局对象可以用来改善这一点。