具有任意整数值的枚举类型

时间:2010-09-24 22:38:11

标签: c++ enums

我想要像

这样的东西
enum EnumType {val1 = -1, val2 = 1};
enum EnumType2 {val1 = 1, val2 = -1};

特别是,val1和val2取决于枚举类型 - EnumType或EnumType2。

所以我最终希望能够说出类似

的内容
EnumType x = val1;
EnumType2 y = val1;

并且x和y具有不同的值。

前述可能吗?

5 个答案:

答案 0 :(得分: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;

答案 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)

是的,但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来改善这一点,因此可以使用全局对象,就好像它们实际上是枚举类型一样。