1 #define SOME_ENUM_PRINT(P) \ 2 P(eNone, 0, "Нет") \ 3 P(eCmd57_Ok, 1, "Команда 57 ОК") \ 4 P(eCmd57_Cancel, 2, "Команда 57 Отмена") \ 5 P(eCmd58, 4, "Команда 58") \ 6 P(eTimer, 8, "Таймер") \ 7 P(ePrintOk, 16, "Печать завершена") \ 8 P(ePrintError, 32, "Ошибка печати") 9 10 enum ESomeEnum { 11 #define P(n, no, s) n = no, 12 SOME_ENUM_PRINT(P) 13 #undef P 14 }; 15 16 // а потом можно вот так: 17 const char * str(ESomeEnum e) 18 { 19 switch(e) 20 { 21 #define P(n, no, s) case n: return s; 22 SOME_ENUM_PRINT(P) 23 #undef P 24 default: return "Unknown"; 25 } 26 }
Понятно, что кроме текста, можно добавить произвольную информацию. С помощью такого макроса легко строить всякие таблицы, создавать куски кода, работающие с каждым членом перечисления и т.д. Как бонус, если изменить перечисления, то многие связанные с этим вещи обновятся автоматически. Ну и последнее - вся информация в одном месте.
При этом все довольно просто и понятно
Комментариев нет:
Отправить комментарий