【发布时间】:2022-12-05 14:48:26
【问题描述】:
假设我有一个整数数组,每个整数对应一个特定枚举类的每个成员。我可以将枚举类转换为 int 来索引数组,但我宁愿使用枚举类来确保类型安全,因为在我的例子中,这是唯一应该允许的类型来索引该数组。
- 有没有办法在不重载 [] 运算符的情况下执行此操作?
- 如果我重载运算符,将会有额外的函数调用成本,对吗?
【问题讨论】:
标签: c++ arrays enums c++20 type-safety
假设我有一个整数数组,每个整数对应一个特定枚举类的每个成员。我可以将枚举类转换为 int 来索引数组,但我宁愿使用枚举类来确保类型安全,因为在我的例子中,这是唯一应该允许的类型来索引该数组。
【问题讨论】:
标签: c++ arrays enums c++20 type-safety
是的,有一种方法可以在不重载 [] 运算符的情况下执行此操作。实现此目的的一种方法是使用从枚举类映射到相应整数索引的 std::map。这允许您直接使用枚举类作为映射的键,而不必将其转换为整数。
这是一个例子:
enum class MyEnum {
VALUE_1,
VALUE_2,
VALUE_3
};
std::map<MyEnum, int> my_map;
// initialize the map
my_map[MyEnum::VALUE_1] = 0;
my_map[MyEnum::VALUE_2] = 1;
my_map[MyEnum::VALUE_3] = 2;
// use the map to get the index for a particular value of the enum class
int index = my_map[MyEnum::VALUE_1];
与使用数组相比,以这种方式使用 std::map 不会增加任何额外的函数调用开销,因为 std::map 类在内部使用哈希表来为给定的枚举值提供索引的恒定时间查找。
【讨论】: