【问题标题】:Is there a way to force indexing to require an enum class for type safety?有没有办法强制索引需要枚举类来保证类型安全?
【发布时间】:2022-12-05 14:48:26
【问题描述】:

假设我有一个整数数组,每个整数对应一个特定枚举类的每个成员。我可以将枚举类转换为 int 来索引数组,但我宁愿使用枚举类来确保类型安全,因为在我的例子中,这是唯一应该允许的类型来索引该数组。

  1. 有没有办法在不重载 [] 运算符的情况下执行此操作?
  2. 如果我重载运算符,将会有额外的函数调用成本,对吗?

【问题讨论】:

    标签: c++ arrays enums c++20 type-safety


    【解决方案1】:

    是的,有一种方法可以在不重载 [] 运算符的情况下执行此操作。实现此目的的一种方法是使用从枚举类映射到相应整数索引的 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 类在内部使用哈希表来为给定的枚举值提供索引的恒定时间查找。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      相关资源
      最近更新 更多