What I want to do is --> create a new object in a new thread. Something like:
Class* object = 0;
Arg arg;
boost::thread t( lambda::bind( object = lambda::new_ptr< Class >()( boost::ref( arg ) );
it doesn't compile, what's correct way?
Thanks to ildjarn, I tried with boost::phoenix and got it work, code is:
Class* object = 0;
CArg arg0;
Arg arg1;
boost::thread t( boost::phoenix::val( boost::ref( object ) ) = boost::phoenix::new_< Class >( boost::cref( arg0 ), boost::ref( arg1 ) );
Again, from ildjarn, the better code is:
Class* object = 0;
CArg arg0;
Arg arg1;
namespace phx = boost::phoenix;
boost::thread t( phx::ref( object ) = phx::new_< Class >( phx::cref( arg0 ), phx::ref( arg1 ) );
boost::thread t( phx::ref( object ) = phx::new_< Class >( phx::cref( arg0 ), phx::ref( arg1 ) );
(given namespace phx = boost::phoenix;
). Notably, you should be using ref
/cref
from namespace boost::phoenix
rather than namespace boost
.
std::thread t([&] { object = new Class(arg); } );