#include <iostream> class A { protected: typedef void (A::*F)(); public: virtual ~A(){} void emA(){ std::cout << "A::emA()\n"; } void exec(F f){ (this->*f)(); } }; class B : public A{ public: B(){ this->A::exec(static_cast<F>(&B::emB)); } virtual ~B(){} void emB(){ std::cout <<"B::emB()\n"; } }; int main(){ B b; } -------------- output: B::emB()