Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::bind for C function
From: Philipp Kraus (philipp.kraus_at_[hidden])
Date: 2012-12-20 19:46:42


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<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.

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


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net