c++ - 在 C++ 中迭代枚举类的常用方法是什么?

标签 c++ enums enumeration enum-class

不幸的是,我发现我所有用于迭代常规 enum 的标准技术都不适用于 enum class,因为 enum classes 不会隐式转换为整数。

不是 How can I iterate over an enum? 的拷贝,因为我问的是枚举类(即:强类型枚举),而他们问的是常规枚举(即: 弱类型枚举)。

最佳答案

另一种选择是使用 C++20 范围来组成 enum 范围:

constexpr inline auto enum_range = [](auto front, auto back) {
  return std::views::iota(std::to_underlying(front), std::to_underlying(back) + 1) 
       | std::views::transform([](auto e) { return decltype(front)(e); }); 
};

然后你可以像这样迭代enum:

enum class color { red, yellow, green, blue };
for (const auto e : enum_range(color::red, color::blue))
  // ...

demo.

关于c++ - 在 C++ 中迭代枚举类的常用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69762598/

相关文章:

ios - 重写枚举初始化?(rawValue : String) to not be optional

java - Hibernate 异常 : java. lang.IllegalArgumentException:枚举类的未知名称值 []

XSD:如何限制派生复杂类型的枚举值?

c++ - 通过 C++ 与 erlang 服务器通信(发送二进制文件)

c++ - TicTacToe 游戏,用户再次玩游戏后棋盘未清除

arrays - 如何使用 typescript 获取枚举的所有值?

c# - C# 中枚举网络连接路径

delphi - 编译器未将类方法映射到接口(interface)方法

c++ - OpenCV 中的直方图函数

c++ - 将一种类型的对象分配给另一种类型