Re: [Openslp-devel] [Openslp-users] callbacks in c++
Brought to you by:
jcalcote
From: John C. <jca...@no...> - 2006-06-27 05:14:59
|
Gaurang, C++ member functions have a hidden first parameter - a reference to "this". By doing this, the language can allow transparent access to the associated object's data. However, this makes the function signature wrong for the callback. What you need to do is declare your private callback member function "static". Then the signature will match, but you won't be able to get at the associated object's data because static members are associated with the class, not the individual object. That is, they act like global functions with private scope. To solve this problem, you can use the void * cookie parameter as a sort of pass-through for the object itself: int MyClass::SomeMember(...) { ... SomeSLPFunction(..., MyClass::MyPrivateStaticCallback, this); ... } Then, inside your MyPrivateStaticCallback method, you just cast the cookie back to your object like this: int MyClass::MyPrivateStaticCallback(..., void * cookie) { MyClass * thisObject = static_cast<MyClass *>(cookie); // now you can use thisObject to call members and reference even private data thisObject.somePrivateData = 1; return 0; } John >>> "Gaurang Sardesai" <gsa...@vm...> 06/26/06 4:48 PM >>> After successfully implementing what i'd set out to do in C, i'm trying to "port" my solution to an more object oriented approach. I created a few classes, for the url, the discovery etc, and tried including the callbacks as private functions. however, the project just refuses to compile, with a "could not find matching function" error. the moment i remove the callback definitions and declarations from the class, i have no problems and it runs fine. i haven't done too much c++ coding, so i was wondering if this is some peculiarity of callbacks and c++. i heard the words "functors" brandished around, and before i delve in and try to figure out what those are, is there anything i should know w.r.t implementing openslp in c++? any quirks/tips/tricks? thanks, cheers, gaurang |