Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/12/2012, 17:01
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 4 meses
Puntos: 83
Respuesta: Puntero de funcion miembro de clase

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