Bueno solucionado, de todas formas gracias por el foro.
Por si alguien lo necesita encontré un truco de Chris Becke que lo soluciona con templates de clases; el ejemplo es el mismo de mi post pero con la solucion adaptada:
Código:
#include <stdio.h>
//estructura de callback
struct Callback {
virtual ~Callback() {}
virtual int operator()(int arg1) = 0;
};
//template para cualquier class pero con una funcion estandarizada, en este caso una tipo int con un argumento tambien int
template<class T> class ClassCallback : public Callback {
T* _classPtr;
typedef int(T::*fncb)(int arg1);
fncb _cbProc;
public:
ClassCallback(T* classPtr,fncb cbProc):_classPtr(classPtr),_cbProc(cbProc) {}
virtual int operator()(int arg1) {
(_classPtr->*_cbProc)(arg1);
}
};
//puntero funcion externa
Callback* ptr_funcion;
//funcion de asignacion del puntero
void asigna(Callback* ptr) {
ptr_funcion = ptr;
}
//clase
class A {
public:
A() {
//crea una nueva estructura de callback
Callback* pCB = new ClassCallback<A>(this, &A::mifuncion);
asigna(pCB);
}
int mifuncion(int v) {
printf("%d", v);
}
};
//principal
int main() {
A *a = new A();
(*ptr_funcion)(1);
delete ptr_funcion;
getchar();
return 0;
}
Saludos
vosk