Skip to main content
Email Password   helpLost your password?

Introduction

Functor implementation

Functor is a wrapper around function. It's useful to unify static and member function calls. Also it's profitable for event mechanism creation.

Syntax represented below works only on MSVC++ 7.1, this file have defines for 6.0 also but you won't be happy using them.

Using:

IFunctor - common interface for all functors. It has few functions:

Call() - calls bounded function,

operator () - calls Call

IsEqual(IFunctor *) - returns true if both functors are bounded with the same function.

Advanced:

IFunctor is inherited from IRefCounted

IRefCounted has these methods:

AddRef() - increments reference counter

Release() - decrements reference counter and deletes object when reference count is zero.

DecreaseRef() - decrements reference counter without deletion

GetFunctor() - overloaded function that creates functor, returns IFunctor

GetFunctor(StaticFunction) - creates static functor

GetFunctor(&obj/*CMyObj */, CMyObj::Function) - creates member functor

GetFunctor(pFunctor/*IFunctor* */) - creates member functor

Advanced:

GetFunctor returns pointer to IFunctor with zero reference counter. So AddRef and then Release will free allocated memory.

CFunctorSet - container for IFunctor*. Also derived from IFunctor, has methods:

operator +=(IFunctor*) - appends functor

operator -=(IFunctor*) - removes functor (and not only if pointers are equal: it uses IsEqual on functors)

Call - calls all functors

operator () -calls Call

Advanced:

operator +=() calls AddRef on given functor pointer

operator -=() calls Release on given functor pointer

So though GetFunctor allocates memory, CFunctorSet releases it.

Thus, in different cases  you must first AddRef and then after all Release pointer returned by GetFunctor.

Example:

    

CFunctorSet<void (*)(int)> m_vMyEvent;
void MyStaticFn(int){}
class CMyClass{ public: void MyMemFn(int){} };
m_vMyEvent+=GetFunctor(MyStaticFn); CMyClass obj; m_vMyEvent+=GetFunctor(&obj, CMyClass::MyMemFn); m_vMyEvent(1); //calls both functions m_vMyEvent-=GetFunctor(MyStaticFn); //it works 'cause operator -=() uses IsEqual m_vMyEvent(2); //calls only member function of CMyClass obj.

Advanced:

CDeferredFunctor - intended for deferred calls in cross thread communication. Methods:

constructor - binds functor

operator =() - binds functor

Call - stores arguments

DeferredCall - calls bounded functor with stored arguments

IsCalled() - returns true if Call is already made but DeferredCall is still not

DeferredCallSaveResult() - saves result of calling

GetResult() - returns result saved by DeferredCallSaveResult

SetOnCall() - allows to set functor that will be called during Call

CRemoteFunctor - same as CDeferredFunctor but stores arguments in IStream. Methods:

constructor - binds functor

Call - stores arguments

RemoteCall - calls bounded functor with stored arguments

GetData(IStream * pStream) - copies internal stream to given

SetData(IStream * pStream, bool bRewind=true) - copies given stream to the internal, sets given stream to start optionally before copying

SetOnCall - allows to set functor that will be called during Call

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
Generalnew comments Pin
araud
23:19 9 Mar '05  
GeneralBad programming Pin
Christian Graus
15:58 8 Mar '05  
GeneralRe: Bad programming Pin
araud
18:45 8 Mar '05  
GeneralRe: Bad programming Pin
Christian Graus
18:55 8 Mar '05  
GeneralRe: Bad programming Pin
araud
20:38 8 Mar '05  
GeneralHmmmm Pin
Kochise
22:42 8 Mar '05  
GeneralRe: Hmmmm Pin
araud
0:28 9 Mar '05  
GeneralI don't believe in God... Pin
Kochise
1:27 9 Mar '05  
GeneralRe: I don't believe in God... Pin
araud
2:08 9 Mar '05  
GeneralHey :) Pin
Kochise
2:53 9 Mar '05  
GeneralRe: Hmmmm Pin
Christian Graus
13:58 9 Mar '05  
GeneralRe: Bad programming Pin
Christian Graus
13:56 9 Mar '05  
GeneralRe: Bad programming Pin
araud
21:52 9 Mar '05  
GeneralRe: Bad programming Pin
Christian Graus
10:34 10 Mar '05  
GeneralRe: Bad programming Pin
araud
21:56 10 Mar '05  
GeneralRe: Bad programming Pin
Christian Graus
12:02 14 Mar '05  
GeneralGood programming Pin
araud
21:16 14 Mar '05  
GeneralRe: Good programming Pin
Christian Graus
11:11 15 Mar '05  
GeneralRe: Good programming Pin
araud
19:44 15 Mar '05  
GeneralRe: Good programming Pin
Christian Graus
13:21 16 Mar '05  
GeneralCode is very hard to read! Pin
Don Clugston
14:22 8 Mar '05  
GeneralRe: Code is very hard to read! Pin
araud
18:58 8 Mar '05  
GeneralRe: Code is very hard to read! Pin
CP Visitor
7:45 9 Mar '05  
GeneralRe: Code is very hard to read! Pin
araud
21:11 9 Mar '05  
Generalgood idea! Pin
WoR
9:04 8 Mar '05  


Last Updated 8 Mar 2005 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009