Boost уже предоставляет способ создания последовательности связанных функций. Используйте оператор лямбды-запятой .
using namespace boost::lambda;
MyClass mc;
CallbackType object = (bind(&MyClass::alert, mc), bind(doIt, _1, _2, _3));
object(1, 2, 3);
Это создаст новый функтор, object
. Когда вы вызываете этот функтор с тремя аргументами, он, в свою очередь, вызывает mc.alert()
перед передачей этих аргументов в doIt
. Скобки важны.
Чтобы мой приведенный выше пример работал, вам нужно, чтобы alert
была функцией const
. Если он должен быть неконстантным, то либо передайте указатель на mc
, либо оберните его boost::ref(mc)
И вам нужно будет использовать Boost.Lambda bind
вместо Boost.Bind; последний не совместим с операторами объединения функций Lambda (в частности, через запятую).