
Sergey Lukin wrote:
Peter Dimov replied:
t.async_wait(boost::bind(Component::Method1, &y, 10, boost::bind (DPC::Print1, &x, 2), &t));
You need to prevent the inner bind from being treated as a subexpression of the outer bind. Either assign it to a function<>:
boost::function<void()> f = boost::bind( DPC::Print1, &x, 2 ); t.async_wait( boost::bind( Component::Method1, &y, 10, f ) ); or use boost::protect, as explained at the end of
I tried both suggested solutions but still have the same errors
boost::function<void(int)> f = boost::bind( DPC::Print1, &x, 2 ); t.async_wait( boost::bind( Component::Method1, &y, 10, f, &t ) ); or t.async_wait( boost::bind( Component::Method1, &y, 10, boost::protect(f), &t ) );
Your Component::Method1 takes two arguments, three with the implicit 'this': class Component { public: template <typename Handler> void Method1 (int x ,Handler h) { x++; h(); } }; but you are passing four, there is one extra &t at the end. You should also use & with member functions, &Component::Method1, although some compilers allow you to omit it.