
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? extern "C" void call_function_object(void* obj) { (*static_cast<function_obj_type*>(obj))(); } where function_obj_type is something that you create that acts like the boost::bind result (or is just boost::function<void ()>). 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. -- Jeremiah Willcock