Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::bind for C function
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2012-12-20 18:59:55


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


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