C/C++ Ready | Программирование
Собираем простой dispatcher команд на C++!
Иногда программа принимает строковую команду и должна вызвать нужное действие. Самый быстрый путь часто начинается с цепочки if.
Например, так легко получить длинный блок условий:
if (cmd == "build") build();
else if (cmd == "clean") clean();
else if (cmd == "status") status();
Когда команд становится больше, такой код сложнее расширять и тестировать. Удобнее явно завести таблицу команд.
Опишем тип обработчика:
using Handler = void (*)();
Теперь можно собрать словарь:
std::unordered_map commands{
{"build", build},
{"clean", clean},
{"status", status}
};
Вызов становится коротким и одинаковым для всех команд:
auto it = commands.find(cmd);
if (it != commands.end()) {
it->second();
}
Если команда не найдена, можно отдельно обработать ошибку:
if (it == commands.end()) {
std::cout << "unknown command\n";
return;
}
Такой dispatcher удобно использовать в CLI-утилитах, тестовых меню, админских командах и маленьких инструментах. Новая команда добавляется одной строкой в таблицу, а не ещё одной веткой в середине логики.
📣 C++ Ready | #практика
16 · 2K ·