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

时间:2015-04-07 17:23:09

标签: c++ enums

我想在我的代码中删除大多数文字值,而是使用枚举。所以我创建了以下枚举:

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的改进还是让整个事情变得更复杂?

1 个答案:

答案 0 :(得分:4)

只要您清楚了解自己的行为,将整个枚举作为整数就可以了。通常,像这样:

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

这使得自己和其他开发人员明确地清楚每个的整数值都很重要,因此枚举有时会被用作整数。

模糊相关,使用bitflags的枚举也很常见,通常看起来更像这样:

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
};

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