Макрос для создания цепочек else ifC++

Программы на C++. Форум разработчиков
Anonymous
Макрос для создания цепочек else if

Сообщение Anonymous »

Использование макроса X для синхронизации нескольких разных вещей с использованием списка, предоставленного вне модуля.
Часть этого включает в себя создание цепочки else/if для проверки строки.
Сейчас я делаю это:

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

if (0) {
// this will never run, and be compiled out
}
#define X(name) else if (some_thing == #name) { // do thing based on name... }
MY_LIST
#undef X
else {
// Report unrecognized string...
}
но мне это кажется немного некрасивым (я не большой поклонник неисполняемого файла if(0) {).
Я думал сделать это с помощью оператора switch...

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

constexpr hash(const char* const str, size_t len, uint64_t init_value)
// implementation left to imagination of the reader)...

//...

switch(hash(some_thing, len(some_thing))) {
#define X(name) case hash(#name, const_len(#name)): { break; }
MY_LIST
#undef X
default:
{
good_thing = false;
break;
}
}
// Now that it has been validated as a good string... save it etc.
Но меня беспокоят коллизии (настолько маловероятные, насколько они маловероятны).
Есть ли способ выполнить цепочку if/else, не начиная с if(0)?
Я застрял на std::14, если это помогает (я знаю, что нет).

Подробнее здесь: https://stackoverflow.com/questions/793 ... d-else-ifs

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