在结构中自动索引枚举ID
Auto-indexing enum ids within structure
我在struct
中有以下enum
:
struct FOODS
{
enum FRUIT
{
ORANGE,
BANANA,
PINEAPPLE
};
enum VEG
{
GINGER,
GARLIC,
ONION
};
enum DRINK
{
WATER,
COFFEE
};
};
我使用它们作为std::vector
的数组索引id,就像array[FOODS::FRUIT::ORANGE]
一样,但我需要按顺序正确地对它们进行索引。我可以使用:
struct FOODS
{
enum FRUIT
{
ORANGE = 0,
BANANA,
PINEAPPLE
};
enum VEG
{
GINGER = 3,
GARLIC,
ONION
};
enum DRINK
{
WATER = 6,
COFFEE
};
};
但是,如果顶部的两个枚举中的任何一个发生了更改,我就必须手动管理所有三个枚举。还有什么更好的办法呢?
建议1:
struct FOODS
{
enum FRUIT
{
ORANGE,
BANANA,
PINEAPPLE,
FRUIT_SIZE
};
enum VEG
{
GINGER = FRUIT_SIZE,
GARLIC,
ONION,
VEG_SIZE
};
enum DRINK
{
WATER = VEG_SIZE,
COFFEE,
DRINK_SIZE
};
};
注意:你不能做下一步:
struct FOODS {
enum FRUIT
{
ORANGE,
BANANA,
PINEAPPLE,
SIZE
};
enum VEG
{
GINGER = FRUIT_SIZE,
GARLIC,
ONION,
SIZE
};
enum DRINK
{
WATER = VEG_SIZE,
COFFEE,
SIZE
};
};
因为您可能需要重新声明名称(FOODS::SIZE
)。
建议2:
struct FOODS
{
enum class FRUIT
{
ORANGE,
BANANA,
PINEAPPLE,
SIZE
};
enum class VEG
{
GINGER = FRUIT::SIZE,
GARLIC,
ONION,
SIZE
};
enum class DRINK
{
WATER = VEG::SIZE,
COFFEE,
SIZE
};
};
enum class
解决了枚举作用域中的名称重叠问题
请注意,强枚举(enum class
)是从C++11开始支持的。
相关文章:
- 使用枚举为数组编制索引是否安全?
- 枚举类的编译时索引器
- 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?
- 类与枚举类作为索引类型
- 如何通过索引访问枚举类
- 在编译时使用 和枚举作为索引分配数组的值 (C++)
- 使用索引设置矢量枚举时的奇怪行为
- C++枚举索引值
- 如何将C 枚举类枚举作为std ::阵列索引而没有明确的铸件
- std::get<0>(...) 和枚举索引
- 如何给枚举值的索引一个得到它?
- 阵列索引(转换为整数)用范围枚举
- 使用枚举作为索引访问 2D 向量
- 枚举类作为数组索引
- 通过其索引获取枚举值
- 在结构中自动索引枚举ID
- 重载枚举索引数组的std::get
- 使用枚举类值为数组编制索引时出现"Array subscript is not an integer"错误
- 从整数索引的for循环枚举到range-for
- 在编译时完全枚举 D 维数组的索引