Boost поставляется с файлом примера в
boost_1_41_0\libs\function_types\example
называется interpreter.hpp
и interpreter_example.hpp
Я пытаюсь создать ситуацию, когда у меня есть набор функций с различными аргументами, типами возвращаемых данных и т. Д., Которые регистрируются и записываются в одном месте. Затем получите возможность извлечь функцию и выполнить ее с некоторыми параметрами.
Прочитав несколько вопросов здесь и из нескольких других источников, я думаю, что дизайн, реализованный в этом файле примера, настолько хорош, насколько я смогу получить. Она принимает функцию любого типа и позволяет вам вызывать ее, используя список строковых аргументов, который разбирается в нужные типы данных.
В основном это консольный интерпретатор команд, и это, вероятно, то, что он хотел проиллюстрировать.
Я изучал код и ковырялся в попытках заставить ту же реализацию принимать функции-члены класса, но пока безуспешно.
Мне было интересно, если кто-то может предложить необходимые изменения, или, возможно, работал над чем-то похожим и иметь какой-то код.
В примере вы увидите
interpreter.register_function("echo", & echo);
interpreter.register_function("add", & add);
interpreter.register_function("repeat", & repeat);
Я хочу сделать что-то вроде
test x;
interpreter.register_function("classFunc", boost::bind( &test::classFunc, &x ) );
Но это нарушает любое количество аргументов.
Так что я думаю, что какой-то вариант автоматического генерирования boost :: bind (& test :: classFunc, & x, _1, _2, _3 ...) был бы подходом, я просто не уверен, как лучше его реализовать.
Спасибо