我可以在内部使用 enum int 表示吗?

Can I use the enum int representation internally?

我想去掉代码中的大多数文字值,改用枚举。所以我创建了以下枚举:

enum Axis { X, Y, Z };

现在我想为此存储数据,发现我会这样做:

vector<T> x, y, z;

然后像这样创建很多 switch 语句:

switch (axis) {
case Axis::X:
    return x;
    break;
...
}

使用 int axis,我能够做到

vector<vector<T>> data(3);

并使用 data[axis] 对其进行索引以获得正确的数据集。我想我也可以使用 Axis axis 并且仍然使用 data[axis] 隐式转换为 int.

当我大部分时间都强制执行此枚举但也使用 Axis::X == 0 这一事实时,这是一件坏事吗?这是对使用 int axis 的改进,还是会使整个事情变得更复杂?

将枚举视为整数是完全可以的,只要您清楚自己在做什么。通常,像这样:

enum Axis { 
    X=0, 
    Y=1, 
    Z=2,
    //axis_count=3, If you intend to iterate over values, add this
};

这让您自己和其他开发人员清楚地知道每个整数值都很重要,因此枚举有时会用作整数。

隐约相关,对位标志使用枚举也很常见,通常看起来更像这样:

enum ThingFlags {
    IsTall    = 1<<0,
    IsWide    = 1<<1,
    IsLong    = 1<<2,
    IsHollow  = 1<<3,
    IsColored = 1<<4,

    Mask      = (1<<5)-1, //common to have a mask of all meaningful bits.
    SizeMask  = 0x7,      //sometimes other masks too
};

这清楚地表明最低有效位表示高度,下一位是宽度,再下一位是长度,等等