Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Punteros A Funciones Miembros De Una Clase

Iniciado por Vanch, 10 de Noviembre de 2003, 06:29:25 PM

« anterior - próximo »

Vanch

 #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.
anch!!! Vanch!!!, don't let me alone.

Gunder

riticar, critica hasta el mas tonto.

_Grey


Vanch

 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.  ;)
anch!!! Vanch!!!, don't let me alone.

Zaelsius

 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:

Zaelsius

 

((mi_a).*(mi_a.accion))();



Yo lo llamo el "Miembro de Oro"

Se recomienda una macro para evitar esa cosa tan fea.

Vanch

 Gracias  (ole)

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

Un saludo y gracias de nuevo.
anch!!! Vanch!!!, don't let me alone.

Vanch

anch!!! Vanch!!!, don't let me alone.







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.