arrays — Эквивалент .values ​​() перечисления из Java в переполнении стека

Сначала я научился программировать на Java, и поэтому при работе с перечислениями я мог использовать .values() чтобы получить массив всех значений в этом конкретном перечислении. Я заметил, что сейчас, изучая C ++, не существует эквивалентного метода.

Каков наилучший способ справиться с этим, так как я уверен, что люди придумали достойные обходные пути?

2

Решение

Для этого в 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 определение напрямую.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]