Puede heredar fácilmente de esa clase:
class Derived: public TimerEvent {
...
};
Sin embargo, no se puede anular HandleTimer en la subclase y esperar que esto funcione:
TimerEvent *e = new Derived();
e->HandleTimer();
Esto se debe a métodos estáticos Don' t tiene una entrada en el vtable, y por lo tanto no puede ser virtual. Sin embargo, puede utilizar el "void * Arg" para pasar un puntero a la instancia ... algo así como:
struct TimerEvent {
virtual void handle(int fd, short event) = 0;
static void HandleTimer(int fd, short event, void *arg) {
((TimerEvent *) arg)->handle(fd, event);
}
};
class Derived: public TimerEvent {
virtual void handle(int fd, short event) {
// whatever
}
};
De esta manera, HandleTimer todavía se puede utilizar desde las funciones de C, sólo asegúrese de pasar siempre el " verdadero "objeto como el 'vacío' Arg".
Simplemente herede y debería funcionar. ¿Tienes algún problema en particular con esto? – jpalecek
Estoy de acuerdo con el comentario anterior, no entiendo la pregunta. –
Tercero el comentario anterior. :) –