
Am 21.12.2012 um 00:59 schrieb Jeremiah Willcock:
On Fri, 21 Dec 2012, Philipp Kraus wrote:
Hello,
I have got a a C library function call, which defines a function: typedef int (*CFunction) (State* K);
So I would like to use boost::bind / boost::function to create the binding to a class method:
boost::function<CFunction>( boost::bind(&MyClass::myMethod, this) )
so that I can use the class method with the CFunction signature. I would like to call a class method with the object context like a C function.
Can anybody help me to create a correct binding?
Assuming State* is void* or something that you can control the definition of, what about this?
Sorry, I can't do this, the typedef is fixed, I must use it in exactly this case.
extern "C" void call_function_object(void* obj) { (*static_cast
(obj))(); } where function_obj_type is something that you create that acts like the boost::bind result (or is just boost::function
). Note that you are responsible for managing the lifetime of the function object you use in this way, since you pass a non-owning pointer to it into the C code.
Can I cast the boost::bind result to the typedef definition? I need something like my_c_call( static_cast<CFunction>( boost::bind(&MyClass::myMethod, this) ) ) Thanks Phil