Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Видно по коду очень хорошо, учитывая, как намешан boost и stl из C++11
InvokeParser — и об этом я специально упомянул — парсинг строки не важен, по сути:Если парсинг xml сделать например на pugixml,
Но больше всего конечно убило полное непонимание variadic templates и логики работы и места назначения generate_sequence.
FunctionCaller реализуется вариадиками без напрягов и не требует специализаций по кол-ву аргументов.
boost можно выкинуть полностью, то что вы используете из boost, имеет либо аналоги в stl, либо реализуется совсем просто тем же stl
boost::function_traits написать? Зачем? Это не сложно(файлик boost\trunk\boost\type_traits\function_traits.hpp содержит около 175 строчек несложных примеров использования частичной специализации шаблона) и отвлекает от решения задачи.У вас в итоге получилась каша из C++03, C++11, boost.
Уж простите, но сначала стоит выучить C++11 (если уж используете его), потом учить других.
DEBUG, так как несоответствие типов происходит только по вине программиста(т.е, задал неправильный callback) — если производительность настолько важна. Но это немножко запутанно, так как придётся оговариваться — «этот тип обозначаем через 0, а этот через 1 и в TypeHelper::name() возвращаем для всех числовых типов 0, потому что смотри выше… и т.д.». Да, Вы абсолютно правы и если производительность совсем критична, и сравнивать типы на соответствие нужно при каждом вызове(кстати, можно сравнивать только первый раз, так как типы с++-функции не поменяются в рантайме… хм..), а не только при определённом DEBUG, то мапить типы можно и на char(unsigned char, если 128 типов о_О не хватает). В любом случае — это вопрос оптимизации, которая, к сожалению, в большинстве случаев приводит к менее читаемому коду…
Вызов функции, соответствующей заданной строке