Tengo una biblioteca C que necesita una función de devolución de llamada para registrarse para personalizar algunos procesos. El tipo de la función de devolución de llamada es int a(int *, int *)
.Utilizando una función de miembro de clase C++ como función de devolución de llamada C
Estoy escribiendo código C++ similar al siguiente y tratar de registrar una función de C++ Class como la función de devolución de llamada:
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()
{
}
El compilador lanza siguiente error:
In constructor 'A::A()',
error:
argument of type ‘int (A::)(int*, int*)’ does not match ‘int (*)(int*, int*)’.
Mis preguntas:
- Antes que nada es posible registrar una función de memeber de clase C++ como lo estoy intentando hacer y si es así h ¿Ay? (Leí 32.8 en http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html. Pero, en mi opinión, no resuelve el problema)
- ¿Existe alguna forma alternativa/mejor de abordar esto?
sí. esa solución funcionó. Lo que me confunde es que el compilador no mostró el error int (A ::) (A *, int *, int *) 'no concuerda' int() (int, int *) ' – Methos
Lo hizo, pero al ponerlo (A: :) lo que significa que la función es parte de la clase A, que a partir de ahí implica el puntero 'this'. – GManNickG
Solo tengo curiosidad ... ¿está esto especificado en el estándar? Solo eché un vistazo a la sección de clases y no encontré esto. Sin embargo, muy interesante. Simplemente no creo que cada compilador necesariamente tenga que manejar funciones de miembros no estáticos de esta manera. – Tom