我想是这样枚举类型的任意整数值
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