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