On Monday 10 February 2003 04:22 pm, Thomas Pollinger wrote:
Apologies if this topic has already been discussed. I have looked around on various mailing lists, in addition I have tried to make it work with the current C++ STL standard with std::mem_fun and std::bind1st but with no success.
The problem is basically to bind a member function pointer with an instance of its declaring class and to assign the result to an existing C library function that expects a C style function pointer. This certainly works for ordinary C functions and static C++ functions, however fails for bound member function pointers.
Here is what I am trying to achieve:
#include
// C function declared in some library struct E; extern void setCallBack(void (*callback_fct)(E*));
class A { public: void init(); void callBack(E *e); .... };
void A::init() {setCallBack(boost::bind(&A::callBack, this));} void A::callBack(E *e) {...}
I tried also using the STL calls, but without success either: ... setCallBack(std::bind1st(std::mem_fun(&A::callBack), this));
Unfortunately, the major problem with function pointers is that you can't send
any extra data with them, so there isn't a good way to package up the A
pointer and send it to setCallback. However, most C callback interfaces also
store a user-defined void* for callback data, which I'm hoping you omitted
for brevity. With such a void*, you can do something like this:
// C function declared in some library
struct E;
extern void setCallBack(void (*callback_fct)(E*), void* data);
typedef boost::function