Tengo una libreria estatica con una variable que es un puntero a una funcion de un tipo determinado, y lo que quiero es enviar un puntero a una funcion miembro de una clase sin tener que referenciar la clase dentro de la libreria externa. Aun cuando no estubiera trabajando con una libreria externa el problema sigue siendo el mismo, el compilador no me deja referenciar la funcion a menos que la declare como static; haciendolo asi solo podré acceder a los static declarados en la clase, pero necesito acceder a todos los datos.
Dejo un ejemplo de codigo de lo que intento resolver (pongo el codigo sin la libreria estatica para no liarlo mas):
Código:
En principio si estubiera fuera de la clase me mostraria el valor 1, pero en la linea 15 me salta el error de "cannot convert 'int (A::*)(int)' to 'int (*)(int)' for argument '1' to 'void asigna(int (*)(int))'#include <stdio.h> //puntero a funcion externo typedef int (*pFoo)(int ); pFoo external_fp; //funcion de asignacion del puntero void asigna(pFoo fptr) { external_fp = fptr; } //clase class A { public: A() { asigna(&A::mifuncion);//aquí me salta el error } ~A(); int mifuncion(int v) { printf("%d", v); } }; //principal int main() { A *a = new A(); external_fp(1); getchar(); return 0; }
Estoy pensando en añadir un dato void* en la libreria externa donde guardaré un puntero a la clase y desde ese ejecutar la funcion publica no estatica, pero no me convence.
Alguna solucion? O alguna idea para hacerlo de otra forma?
Muchas gracias por adelantado y saludos
vosk