Using a C++ class member function as a C callback function

c, c++, callback, interop

Solution

You can do that if the member function is static.

Non-static member functions of class A have an implicit first parameter of type `class A*` which corresponds to this pointer. That's why you could only register them if the signature of the callback also had the first parameter of `class A*` type.

Problem

I have a C library that needs a callback function to be registered to customize some processing. Type of the callback function is `int a(int *, int *)`. I am writing C++ code similar to the following and try to register a C++ class function as the callback function: ``` class A { public: A(); ~A(); int e(int *k, int *j); }; A::A() { register_with_library(e) } int A::e(int *k, int *e) { return 0; } A::~A() { } ``` The compiler throws following error: ``` In constructor 'A::A()', error: argument of type ‘int (A::)(int*, int*)’ does not match ‘int (*)(int*, int*)’. ``` My questions: - First of all is it possible to register a C++ class member function like I am trying to do and if so how? (I read 32.8 at http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html. But in my opinion it does not solve the problem) - Is there a alternate/better way to tackle this?

Original source

Related problems