我想要像
这样的东西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 :(得分:1)
好吧,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;
答案 1 :(得分:0)
如果它们具有相同的名称,则不会。如果你给他们一个不同的名字,你可以这样做。以下是我通常声明枚举以便它们不会发生冲突的方法:
enum EnumType {et1_val1 = -1, et1_val2 = 1};
enum EnumType2 {et2_val1 = 1, et2_val2 = -1};
答案 2 :(得分:0)
我可能会弄错,但我认为您的示例中的含糊不清可以使用EnumType :: val1和EnumType2 :: val1
来解决答案 3 :(得分:0)
您可以使用具有任意整数值的枚举,但不能使用具有相同名称的枚举值。您必须为它们指定不同的名称,或将它们放入不同的名称空间。
答案 4 :(得分:0)
是的,但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
来改善这一点,因此可以使用全局对象,就好像它们实际上是枚举类型一样。