Я уже знаю основы функторов, как они создаются и так далее.Теперь у меня есть конкретный код, который, вероятно, выиграет от преобразования в функторы:
Речь идет о консольном вводе.Если пользователь вводит текст и нажимает клавишу ввода, он пытается выполнить введенный текст как команду.В настоящее время доступные команды хранятся в std::map<std::string, (void*)(std::string)>
, где map.first - это имя команды, а map.second - указатель на функцию, содержащую код для этой команды.
Если я теперь преобразую это вфункторы, что было бы лучшим способом сделать это?Я просто заменил бы указатель функции фактическими объектами функтора?Или удалите карту и просто вызовите функтор с командной строкой (commandFunctor("command")
)?Если второе: как лучше будет выглядеть такой функтор?Должен ли я тогда создавать только ОДИН класс функторов и в его operator () поместить команду if-else-if-else ... для проверки команд и сохранения в ней кода?
Или я должен создать новый функторкласс для каждой команды и вызовите функтор, соответствующий этой команде?
Итак, вкратце: пользователь вводит команду.Команда ищется.Если команда существует, выполните ее код.Как сделать это наиболее эффективно с помощью функторов?