#include <conio.h>
#include <stdio.h>
class a
{
private:
int valor;
public:
void (a::* accion) (void);
a(void);
void activar (int i);
void setvalor (int i);
void numero (void);
void ascii (void);
};
a::a(void)
{
accion=NULL;
valor=65;
}
void a::activar (int i)
{
switch (i)
{
case 0:
accion=numero;
break;
case 1:
accion=ascii;
break;
}
}
void a::setvalor (int i) { valor=i; }
void a::numero (void) { printf ("%d\n",valor); }
void a::ascii (void) { printf ("%c\n",valor); }
void main (void)
{
a mi_a;
mi_a.numero();
mi_a.ascii();
mi_a.activar(0);
mi_a.accion();
getch();
}
mi_a.accion();
debería realizar la llamada a la función a la que apunta, pero me da un error de compilación. Me trata acción como si de una variable se tratara.
Agradecerá cualquier ayuda, aunque entiendo que no es fácil el tema.
Usa Functors. Esta en ingles, lo siento.
http://www.tutok.sk/fastgl/callback.html
:ph34r: Que yo sepa ........ no se puede.
Uffff gunder me parece demasiado... ...para lo que pretendo.
¿ no es posible tener un puntero dentro de una clase que apunte a una funcion de la propia clase ? (nooo)
¿ No hay ningun gurú que me pueda ayudar con lo anterior ?
Gracias.
P.D: Gunder lo de los Callbacks y los Functors estan de vicio (genial) , no lo conocia será fantástico implementarlo, muchas gracias. ;)
Esto sí funciona:
#include <conio.h>
#include <stdio.h>
class a;
typedef void (a::* aFn)(void);
class a
{
public:
aFn accion;
private:
int valor;
public:
a(void);
void activar (int i);
void setvalor (int i);
void numero (void);
void ascii (void);
};
a::a(void)
{
accion=NULL;
valor=65;
}
void a::activar (int i)
{
switch (i)
{
case 0:
accion=numero;
break;
case 1:
accion=ascii;
break;
}
}
void a::setvalor (int i) { valor=i; }
void a::numero (void) { printf ("%d\n",valor); }
void a::ascii (void) { printf ("%c\n",valor); }
void main (void)
{
a mi_a;
mi_a.numero();
mi_a.ascii();
mi_a.activar(0);
((mi_a).*(mi_a.accion))();
getch();
}
No me des las gracias.. me bastó el botón Lucky de google :rolleyes:
((mi_a).*(mi_a.accion))();
Yo lo llamo el "Miembro de Oro" (http://www.nrk.no/img/205404.jpeg)
Se recomienda una macro para evitar esa cosa tan fea.
Gracias (ole)
Puedes explicar el pq ? o algun link donde lo explique ?
Un saludo y gracias de nuevo.
:(