All pastes #355248 Raw Edit

korCZis

public cpp v1 · immutable
·published 2007-02-14 11:21 UTC
rendered paste body
// functor.hclass Functor{public:	virtual void operator()(const char* string)=0;  // call using operator};template<class SomeClass>class SpecificFunctor : public Functor{	void (SomeClass::*fpt)(const char*);   // pointer to member function	SomeClass* pt2Object;                  // pointer to objectpublic:	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<ClassA> specFuncA(&objA, &ClassA::Display);	//    b) functor which encapsulates pointer to object and to member of TClassB	SpecificFunctor<ClassB> specFuncB(&objB, &ClassB::Display);	Functor* vTable[] = { &specFuncA, &specFuncB };	(*vTable[0]) ("called!");        	(*vTable[1]) ("called!");        	return 0;}