C++26反射提案是否支持枚举类型遍历?
C++26反射提案中的枚举遍历支持
是的,C26的核心反射提案(以P2996系列为基础,已纳入C26工作草案)提供了遍历枚举类型枚举器的能力。
基本用法
通过反射库的reflect接口获取枚举类型的元对象,再通过元对象的成员接口获取枚举器列表,即可实现遍历。示例代码如下:
#include <reflect> #include <iostream> enum class Color { Red, Green, Blue }; int main() { // 获取Color枚举的元对象 constexpr auto enum_meta = std::reflect(Color); // 遍历所有枚举器 for (const auto& enumerator : enum_meta.enumerators()) { // 获取枚举器名称和对应值 std::cout << "名称: " << enumerator.name() << ", 值: " << enumerator.value() << '\n'; } return 0; }
关键细节
- 遍历得到的枚举器元对象可通过
name()获取标识符字符串,通过value()获取对应的整数值。 - 该能力同时支持传统不限定枚举(
enum)和强类型枚举(enum class)。 - 目前部分编译器的预览版本已提供实验性支持(如GCC 14+)。
内容的提问来源于stack exchange,提问作者SpeakX
相关产品推荐
相关产品推荐

