C++ - Приемане на потребителски вход като извикване на функция

Имам C++ програма с шест функции, които извършват действия върху имплементация на файлова система. Нямам проблем с тези функции - това е училищен проект и проблемът ми е по отношение на метода на тестване. Трябва да приема "команди", които са основно извиквания на функции - като "write(test.dat,128KB)" или "read(test.dat)".

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


person Melon    schedule 07.04.2014    source източник
comment
Това е въпрос на дизайн. Има модели на проектиране, предназначени специално да се справят с тези проблеми... стратегията е модел, който ми идва на ум...   -  person MS Srikkanth    schedule 07.04.2014


Отговори (1)


Анализирайте текста на командата. Получавате име на команда и аргументи (вероятно всички низове).

Потърсете манипулатора за командата. Може да има етап „валидатор“ или „синтактичен анализатор на тип аргумент“, или може просто да има извикване.

Извикайте командата, като й предадете vector от аргументите (или като низове, или като boost::variants, произведени от анализатора на типа аргумент).

Извикващият може да обвие функция с известни параметри и да преведе vector в C++ извикване. Изисканото метапрограмиране на шаблон може да направи това без да го напишете полуръчно, но освен ако нямате програма в индустриален мащаб, може да не си струва.

person Yakk - Adam Nevraumont    schedule 07.04.2014