【发布时间】:2013-08-20 20:45:53
【问题描述】:
在我的项目中,我有几个类似的枚举声明;
enum Comparison
{
LT, // "<"
GT, // ">"
EQ, // "=="
LTEQ, // "<="
GTEQ, // ">="
NEQ // "!="
};
enum Arithmetic
{
ADD, // "+"
SUB, // "-"
MUL, // "*"
DIV, // "/"
MOD, // "%"
};
我想将其中几个组合成一个组合枚举,这样;
- 所有元素(来自子枚举)都存在于组合枚举中。
- 所有元素都有一个唯一值(显然)。
- 所有元素在组合枚举中的值与原始值一致。
像这样:
enum Comparison
{
LT, // "<"
GT, // ">"
EQ, // "=="
LTEQ, // "<="
GTEQ, // ">="
NEQ // "!="
ADD, // "+"
SUB, // "-"
MUL, // "*"
DIV, // "/"
MOD, // "%"
};
另外,我希望能够做的是将组合枚举“转换”为原始枚举之一,仅给定组合枚举中的值(假设值是一致的,这应该是微不足道的)。
枚举的替代方案是基于类的解决方案,其中类实现operator int() 运算符。
注意;我确实相信operator int() 在某种程度上是可行的方法。
【问题讨论】:
-
当两个元素在不同的
enums 中具有相同的值时会发生什么? -
我没有明确地为任何元素赋值,我希望编译器在可能的情况下自动处理它。我当前的“修复”是简单地将每个枚举中的第一个元素分配给前一个枚举中最后一个元素的值(+1)。 - 但是我一点也不喜欢。
-
你为什么希望有几个枚举以及一个“主”枚举?
-
因为枚举代表了几个逻辑实体,例如;比较运算符、关键字、分隔符等。 - 但是对于词法分析器,我需要这些实体的每个元素的唯一 ID。
-
@Skeen:如果您没有明确设置值,编译器并没有真正为您设置它。默认是从 0 开始并为每个新的枚举元素递增。明确设置它们可以为您提供所需的控制。