Страницы

Поиск по вопросам

пятница, 29 марта 2019 г.

Функция со switch с переменным количеством case

Допустим, у меня есть несколько таких блоков:
// Ввод символа do switch (_getch()) { // Делать одно case '1': dosmth1(); break; // Делать второе case '2': dosmth2(); break; // Делать третье case '3': dosmth3(); break; // Выйти case '0': dosmth0(); return 0; } while (true);
Но, ввиду частого создания оных, возникает вопрос:
Как организовать такую функцию menu(), которая создавала бы n-ное количество case, соответствующих n-ному количеству параметров (указателей на функции)?

Вызов такой функции по принципу stdarg
menu(4, dosmth1, dosmth2, dosmth3, dosmth0);


Ответ

Если сигнатуры вызываемых функций одинаковы, то самый простой способ - использовать контейнер типа std::map, std::unordered_map. Ключом будет выступать char или int, а в качестве типа значения использоваться указатель на функцию. Например:
std::map action;
Когда контейнер заполнен использование может быть сокращено до вида:
action[_getch()]();
Понятно, что в общем случае могут потребоваться дополнительные проверки на существование элемента, т.к. по умолчанию оператор [] приводит к созданию элемента, если его не было.

Комментариев нет:

Отправить комментарий