30 virtual ~ThreadFunc() {}
31 virtual void run() = 0;
36 struct ThreadFunctor : ThreadFunc
38 ThreadFunctor(T functor) : m_functor(functor) {}
39 virtual void run() {m_functor();}
44 template <
typename F,
typename A>
45 struct ThreadFunctorWithArg : ThreadFunc
47 ThreadFunctorWithArg(F
function, A arg) : m_function(function), m_arg(arg) {}
48 virtual void run() {m_function(m_arg);}
55 struct ThreadMemberFunc : ThreadFunc
57 ThreadMemberFunc(
void(C::*
function)(), C*
object) : m_function(function), m_object(object) {}
58 virtual void run() {(m_object->*m_function)();}
59 void(C::*m_function)();
68 Thread::Thread(F functor) :
70 m_entryPoint(new priv::ThreadFunctor<F>(functor))
76 template <
typename F,
typename A>
79 m_entryPoint(new priv::ThreadFunctorWithArg<F, A>(function, argument))
88 m_entryPoint(new priv::ThreadMemberFunc<C>(function, object))