我一直在尝试创建带有子枚举的主枚举类型,以提高可读性和用法。这是我的意思的示例:
enum TileType {
enum Ground {
FLAT,
SLOPE // ...
},
enum Props {
SIGN // ...
}
// ...
};
为了更好的层次结构,可以将其称为
TileType type = TileType::Ground::FLAT
。我想到了将枚举包装在命名空间中:
namespace TileType {
enum Ground {
FLAT,
SLOPE // ...
};
enum Props {
SIGN // ...
};
// ...
};
我可以将其用作
int TileType::Ground::FLAT
,但由于Ground
和Props
均为0,因此无法区分Ground::FLAT
的Props::SIGN
。我正在寻找使用
enum class
,但由于每个枚举将是一个不同的类,所以我将无法使用TileType type = TileType::Ground::Flat
。 最佳答案
enum TileTypes
{
GroundTypes = 1000
PropTypes = 2000
}
enum Ground
{
FIRST_GROUND = GroundTypes,
FLAT = FIRST_GROUND,
SLOPE,
...,
INVALID_GROUND
}
enum Props
{
FIRST_PROP = PropTypes,
SIGN = FIRST_PROP,
...,
INVALID_PROP
}
这是我通常处理持久性结构的可分组类型定义的方式。这里的优点是:
bool isGround(int value) { return FIRST_GROUND <= value && INVALID_GROUND > value; }