Trey Jackson wrote: > Just started using boost::bind, like it a lot. > I'm playing around with a little work crew, > which just queues up data, then calls the function > on them later.
[...] > I'd like to be able to do something like: > ,---------------- > | work_crew<???> mycrew(bind(&X::f, &x, _1, _2)); > | > | mycrew.add( ?? 9 10 ?? ); > | mycrew.add( ?? 42 10 ?? ); > | mycrew.add( ?? 29232 10 ?? ); > | > | // do work > | mycrew.dowork(); // STILL calls x.f(9, 10), x.f(42,10), > x.f(29232,10)b > `---------------- > > > Where obviously I have to do something special to package up the > arguments to the function object that's been created. > > > Is it possible without a huge amount of coding? I was doing something like it recently, so, sure: #include "boost/function.hpp" #include "boost/bind.hpp" #include "boost/tuple/tuple.hpp" #include "boost/tuple/apply.hpp" #include <list> using namespace boost; template <class DataType, class FunctionType = boost::function1<void, DataType> > class work_crew { std::list<DataType> queue_; FunctionType engine_; public: work_crew(FunctionType const& tocall); void add(DataType d) { queue_.push_front(d); }; void dowork() { typedef typename std::list<DataType>::iterator iterator_t; for (iterator_t iter = queue_.begin(); iter != queue_.end(); ++iter) tuples::apply(this->engine_, *iter); // here }; }; struct X { bool f(int a, int b); }; X x; int main() { work_crew< tuples::tuple<int,int>, boost::function2<void,int,int> > mycrew(bind(&X::f, &x, _1, _2)); mycrew.add( tuples::make_tuple(9, 10) ); mycrew.add( tuples::make_tuple(42, 10) ); mycrew.add( tuples::make_tuple(29232, 10) ); // do work mycrew.dowork(); // STILL calls x.f(9, 10), x.f(42,10), x.f(29232,10)b } With a little bit more of coding and Boost.MPL, you can do even better on work_crew< tuples::tuple<int,int>, boost::function2<void,int,int> > mycrew(bind(&X::f, &x, _1, _2)); line: work_crew< mpl::list<int,int> > mycrew(bind(&X::f, &x, _1, _2)); but I am not sure if you want to dive into it from the beginning. The only caveat to the above is that "tuple/apply.hpp" header is not a part of the Boost yet. Please see http://www.mail-archive.com/boost@lists.boost.org/msg05246.html for the source. We still have a chance to have the facility in 1.30 release, though (it's a pure extension of Boost.Tuple library) - but I need to hear from Jaakko on this one. Aleksey _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost