C/С++: есть ли способ получить отражающие перечисления?C++

Программы на C++. Форум разработчиков
Гость
C/С++: есть ли способ получить отражающие перечисления?

Сообщение Гость »

Я столько раз сталкивался с такой ситуацией...

Код: Выделить всё

 enum Fruit {
Apple,
Banana,
Pear,
Tomato
};
Теперь у меня есть Fruit f; // банан и я хочу перейти от f к строке "Банан"; или у меня есть строка s = "Banana", и отсюда я хочу перейти к значению перечисления Banana // или int.

Пока Я делал это. Предполагая, что перечисление находится в Fruit.h:

Код: Выделить всё

// Fruit.cpp
const char *Fruits[] = {
"Apple",
"Banana",
"Pear",
"Tomato",
NULL
};
Очевидно, что это беспорядочное решение. Если разработчик добавляет новый фрукт в заголовок и не добавляет новую запись в Fruits[] (его нельзя винить, они должны быть в двух разных файлах!), приложение просто бум.

Есть ли простой способ сделать то, что я хочу, когда все находится в одном файле? Взломы препроцессора, инопланетная магия, что угодно..

PS: Это, в отличие от отражения «для всего», было бы действительно тривиально реализовать в компиляторах. Видя, насколько это распространенная проблема (по крайней мере для меня), я действительно не могу поверить, что нет отражающего перечисления Fruit.. Даже в C++0x.

PS2: Я использую C++, но я также пометил этот вопрос как C, потому что у C та же проблема. Если ваше решение включает в себя только элементы C++, меня это устраивает.

Подробнее здесь: https://stackoverflow.com/questions/180 ... tive-enums

Вернуться в «C++»