Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Vanch en 10 de Noviembre de 2003, 06:29:25 PM

Título: Punteros A Funciones Miembros De Una Clase
Publicado por: Vanch en 10 de Noviembre de 2003, 06:29:25 PM
 #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.
Título: Punteros A Funciones Miembros De Una Clase
Publicado por: Gunder en 11 de Noviembre de 2003, 04:23:24 PM
 Usa Functors. Esta en ingles, lo siento.


http://www.tutok.sk/fastgl/callback.html
Título: Punteros A Funciones Miembros De Una Clase
Publicado por: _Grey en 11 de Noviembre de 2003, 08:54:31 PM
  :ph34r: Que yo sepa ........ no se puede.
Título: Punteros A Funciones Miembros De Una Clase
Publicado por: Vanch en 11 de Noviembre de 2003, 08:58:19 PM
 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.  ;)
Título: Punteros A Funciones Miembros De Una Clase
Publicado por: Zaelsius en 11 de Noviembre de 2003, 11:11:27 PM
 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:
Título: Punteros A Funciones Miembros De Una Clase
Publicado por: Zaelsius en 11 de Noviembre de 2003, 11:20:57 PM
 

((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.
Título: Punteros A Funciones Miembros De Una Clase
Publicado por: Vanch en 12 de Noviembre de 2003, 04:14:39 PM
 Gracias  (ole)

Puedes explicar el pq ? o algun link donde lo explique ?

Un saludo y gracias de nuevo.
Título: Punteros A Funciones Miembros De Una Clase
Publicado por: Vanch en 18 de Noviembre de 2003, 09:45:12 PM
  :(  
Título: Punteros A Funciones Miembros De Una Clase
Publicado por: Zaelsius en 18 de Noviembre de 2003, 10:25:35 PM
 http://www.parashift.com/c++-faq-lite/poin...to-members.html
;)