Martin Gysel wrote:
> it is a little bit more complex as my callback
> expects more than one argument
> to register:
>     c_lib_call_reg_callback(mycontext, <c_cb_t>self.callback, <void*>self)
>
> and the callback (as plain c fuction)
>     void callback(context *c, void *userdata)
>
> according to your code above, the first argument where the callback gets
> called is the first argument of the declared callback (in code above,
> cb(userdata) -> callback(self): userdata->self)

Yes. That's a special case that would have worked in your original example.


> now I'm asking myself what's the benefit to declare a c callback in the
> class rather then outside and and call another class method from there,
> like this:
> cdef void callback(context *c, void *userdata):
>     doWhatHasToBeDone(c)
>     anotherOperation(<a_c_struct_t *>(<Cobj>userdata).loop)
>     itsDone((<Cobj>userdata).cbDone())
>
> what's the best way to do such things?

It's perfectly ok (and very common, due to signature constraints) to
define a callback function outside of a class and to call back into some
class instance from inside the callback (just as you do above). In many
cases, your callback context/user-data will be a Python object anyway. It
really just depends on what your callback does.

Stefan

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to