没有明确作用域的强类型枚举?

5

我希望有一个强大的枚举类型。C++0x 有这个特性,但不幸的是它们还需要显式作用域:

enum class E {e1, e2, e3};
E x = E::e1; //OK
E y = e1; //error

有时这样做是有益的,但有时它只是不必要的冗长。标识符本身可能已经足够独特,或者枚举可能已经嵌套在类或命名空间中。
因此,我正在寻找一种解决方法。最好的方法是如何在周围的作用域中声明枚举值?

+1 "谢谢,我也是这样想的。" 自从强类型枚举出现以来,我一直被同样的事情困扰,以至于我不再使用它们。我不明白为什么没有像 using 一样的东西可以用于 enum。虽然很多人滥用了 using,但本质上并没有什么问题。 - Damon
如果你的作用域枚举被封装在类或命名空间中,那么你就会变得啰嗦。将枚举移到它们所属的外部,这才是它们存在的意义! - rubenvb
@rubenvb:enum class与类没有任何关系。 - Sebastian Mach
phresnel:我知道这一点,但是OP说:“或者枚举可能已经嵌套在类或命名空间中”。我只是建议删除那个额外的语法间接性。 - rubenvb
1个回答

7

如果您想在周围的范围内看到这些值,请添加一些常量:

enum class E {e1, e2, e3};

const E e1 = E::e1;
const E e2 = E::e2;
const E e3 = E::e3;

不同之处在于,这些值不能隐式转换为整数类型。这可以避免一些错误。 - Bo Persson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接