我想在我的代码中删除大多数文字值,而是使用枚举。所以我创建了以下枚举:
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
的改进还是让整个事情变得更复杂?
答案 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
};
这清楚地表明,最低有效位表示高度,下一位是宽度,下一位是长度等。