在c++中等价于Java中枚举的.values()

Equivalent of .values() of enum from Java in C++

本文关键字:values Java c++ 等价于 枚举      更新时间:2023-10-16

我最初学习Java编程,因此当使用枚举时,我可以使用.values()来生成该特定枚举中所有值的数组。我注意到现在学习c++,没有一个等效的方法。

解决这个问题的最好方法是什么,我相信人们已经想出了体面的变通方法?

在c++中这样做通常需要在枚举中使用一个特殊的前哨值或一些预处理魔法。

如果枚举数是顺序的,那么可以使用一个简单的前哨值(本例中为end):

enum my_enum {
    a,
    b,
    c,
    my_enum_end,
};
for (int i = 0; my_enum_end != i; ++i) {
    // Loop through all of the enum values.
}

当枚举比较复杂并且每个枚举数之间有间隔时,可以使用预处理器:

#define ENUMS(F) F(a, 1) F(b, 5) F(c, 10)
#define AS_ENUM(ID, V) ID = V,
#define AS_VALUE(ID, V) V,
#define AS_ID(ID, V) #ID,
enum my_enum {
    ENUMS(AS_ENUM)
};
my_enum const my_enum_values[] = {ENUMS(AS_VALUE)};
std::string const my_enum_keys[] = {ENUMS(AS_ID)};
for (my_enum const i : my_enum_values) {
    // Loop through all of the enum values.
}
for (auto const& i : my_enum_keys) {
    // Loop through all of the enum keys.
}

这里所有的枚举数都在ENUMS宏中指定,而不是直接在enum定义中指定。