Comments 11
UFO just landed and posted this here
Это совсем другое, мягко выражаясь.
Кроме того, в вашем варианте совершенно не нужны #undef X, достаточно имя X передавать в LIST_OF_STATUSES(some_X)...
UFO just landed and posted this here
#define LIST_OF_STATUSES(X) \
X(STATUS_IDLE) \
X(STATUS_CONNECTING) \
X(STATUS_CONNECTED) \
X(STATUS_DISCONNECTING) \
X(STATUS_ERROR)
/* Create the enumeration */
#define X1(name) name,
typedef enum {
LIST_OF_STATUSES(X1)
} status_t;
/* Create the strings mapped to the enumeration */
#define X2(name) #name,
static char *status_strings[] = {
LIST_OF_STATUSES(X2)
};
Что-то метод совсем не новый, ещё три года назад подобная методика всплывала на stack overflow: https://stackoverflow.com/questions/28828957/enum-to-string-in-modern-c11-c14-c17-and-future-c20
Впрочем автор упомянул о библиотеке magic_enum.
Проблема в том, что хак на хаке — конструкция очень хрупкая. Уже в SunPRO нет даже __FUNCTION__.
Кажется, вы изобрели magic_enum
Sign up to leave a comment.
Имя enum'a C++ в рантайме