mytest.cpp: #include "common.h" class A { public: A() {} ~A() {} virtual void worker() { std::cout << "I am A worker" << std::endl; } virtual A *factory() { return new A; } virtual void operator()() { std::cout << "Calling A operator()" << std::endl; worker(); } void threadcontroller() { boost::thread_group thre; for(;;) { A *mea = factory(); mea->worker(); thre.create_thread(*mea); exit(0); } } }; class B: public A { public: B() {} ~B() {} virtual void worker() { std::cout << "I am B worker" << std::endl; } virtual void operator()() { std::cout << "Calling B operator()" << std::endl; worker(); } B *factory() { return new B; } }; int main() { B meb; meb.worker(); meb.threadcontroller(); } output: $ ./mytest I am B worker I am B worker Calling A operator() I am A worker