#include struct Base { virtual void f() { printf("Base::f()\n"); } }; struct Derived:Base { virtual void f() { printf("Derived::f()\n"); } }; void SomeMethod(Base& object, void (Base::*ptr)()) { (object.*ptr)(); } int main() { Base b; Derived d; Base* p = &b; SomeMethod(*p, %Base::f); //calls Base::f() p = &d; SomeMethod(*p, &Base::f); //calls Derived::f() }