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

不幸的是,我发现我所有用于迭代常规 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.

https://stackoverflow.com/questions/69762598/

相关文章:

python - 如何并排放置两个或多个 ASCII 图像?

java - 从 Double.toLongBits 创建的 long 中获取 double

r - flextable 中有条件的粗体值

postgresql - 在 PostgreSQL 中存储 UUID 的最佳数据类型是什么?

google-cloud-platform - 如何继承访问权限以查看属于 GCP 组织的所有项目?

javascript - React 中的 for 循环

r - 如何从 R 中的多列创建合并值的新数据框

r - pivot_longer 对于具有相同 names_to 的多个集合

kotlin - 在 Android Compose 的 View 模型中使用 State

sorting - 如何按索引对 Vec 进行排序?