// functor.h class Functor { public: virtual void operator()(const char* string)=0; // call using operator }; template class SpecificFunctor : public Functor { void (SomeClass::*fpt)(const char*); // pointer to member function SomeClass* pt2Object; // pointer to object public: SpecificFunctor(SomeClass* _pt2Object, void(SomeClass::*_fpt)(const char*)) { pt2Object = _pt2Object; fpt=_fpt; } virtual void operator()(const char* string) { (*pt2Object.*fpt)(string); } }; class ClassA{ public: ClassA(){}; void Display(const char* text) { cout << "ClassA::Display " << text << endl; }; }; class ClassB{ public: ClassB(){}; void Display(const char* text) { cout << "ClassB::Display " << text << endl; }; }; // main.cpp #include "functor.h" int _tmain(int argc, _TCHAR* argv[]) { ClassA objA; ClassB objB; // a ) functor which encapsulates pointer to object and to member of TClassA SpecificFunctor specFuncA(&objA, &ClassA::Display); // b) functor which encapsulates pointer to object and to member of TClassB SpecificFunctor specFuncB(&objB, &ClassB::Display); Functor* vTable[] = { &specFuncA, &specFuncB }; (*vTable[0]) ("called!"); // via function "Call" (*vTable[1]) ("called!"); // via operator "()" return 0; }