Once its in the thread it seems to revert to class A's methods.
Slicing occurs here:
thre.create_thread(*mea); The B object is being copied as an A object. I think it's when the temporary boost::function0<void> object passed to create_thread() is constructed.
Try passing a refefence to A. e.g: // warning: untested template <typename T> struct callable_ref { T& m_ref; explicit callable_ref(T& ref) : m_ref(ref) {} void operator()() {m_ref();} }; // no copy -> no slicing // reference to A -> virtual B::operator() is called thre.create_thread( callable_ref<A>(*mea) ); By the way, I think you can't use boost::ref, as boost::reference_wrapper does not have operator() thre.create_thread( boost::ref(*mea) ); // doesn't work? Maybe TR1 can do it as std::tr1::reference_wrapper should have an appropriate operator() thre.create_thread( std::tr1::ref(*mea) ); // probably works
participants (1)
-
dariomt@gmail.com