С++ - прием пользовательского ввода как вызова функции

У меня есть программа на C++ с шестью функциями, которые выполняют действия над реализацией файловой системы. У меня нет проблем с этими функциями — это школьный проект, и моя проблема связана с методом тестирования. Мне нужно принимать «команды», которые в основном являются вызовами функций, такими как «запись (test.dat, 128 КБ)» или «чтение (test.dat)».

Я нашел решения для использования оператора switch для вызова функций на основе ввода, но, поскольку каждая команда имеет свои собственные параметры, в моем случае это невозможно. Есть ли способ преобразовать пользовательский ввод в вызов функции? Единственный способ, который я могу придумать, - это проанализировать строку и извлечь вызываемую функцию, использовать оператор switch для вызова этой функции, отдельно извлечь аргументы и передать их функции, но это кажется неэффективным. Возможно ли также, что есть совершенно другой и лучший способ сделать это?


person Melon    schedule 07.04.2014    source источник
comment
Это вопрос дизайна. Существуют шаблоны проектирования, специально предназначенные для решения этих проблем... стратегия - это шаблон, который приходит мне на ум...   -  person MS Srikkanth    schedule 07.04.2014


Ответы (1)


Разобрать текст команды. Вы получаете имя команды и аргументы (возможно, все строки).

Найдите обработчик команды. У него может быть этап «валидатора» или «парсера типа аргумента», или у него может быть просто вызов.

Вызовите команду, передав ей vector аргументов (либо в виде строк, либо в виде boost::variant, созданных синтаксическим анализатором типа аргумента).

Вызывающий может обернуть функцию известными параметрами и преобразовать vector в вызов C++. При метапрограммировании причудливых шаблонов это могло бы произойти без написания его вручную, но если у вас нет программы промышленного масштаба, возможно, оно того не стоит.

person Yakk - Adam Nevraumont    schedule 07.04.2014