Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: pablomatico en 29 de Noviembre de 2006, 10:21:50 AM

Título: Llamar a una función de forma dinámica.
Publicado por: pablomatico en 29 de Noviembre de 2006, 10:21:50 AM
Hola, os explico lo que quiero hacer porque por el título del hilo es dificil averiguarlo jeje..

Yo quiero almacenar en una tabla los nombres o punteros a distintas funciones o procedimientos, para luego poder llamar a una función a través de la información almacenada en esa tabla, se puede hacer esto en c++?

Gracias de antemano, espero haberme explicado algo...
Título: Llamar a una función de forma dinámica.
Publicado por: AK47 en 29 de Noviembre de 2006, 10:33:37 AM
Sí se puede hacer, por ejemplo mediante punteros a funciones. Miratelos, pero te aviso que son un poco engorrosos de usar... Por cierto, creo que la librería boost te ofrece ciertos wrappers y elementos por el estilo para manipularlos más facilmente.
Título: Llamar a una función de forma dinámica.
Publicado por: Helius en 29 de Noviembre de 2006, 11:58:15 AM
Un puntero a un método en C++, con unos parámetros de ejemplo:

int (TClase::*ptMetodo)(float, int, char) = NULL;
Te creas un typedef:

typedef int (TClase::*ptMetodo)(float, int, char);
Y luego el array:

ptMetodo miArray[100] = NULL;
Los tendrás que inicializar con la dirección de los métodos que desees y luego para usarlos:

(*miArray[3])(40.0f, 7, 'a');
No estoy seguro de si esto funciona:

miArray[3](40.0f, 7, 'a');
Saludos.
Título: Llamar a una función de forma dinámica.
Publicado por: shephiroth en 29 de Noviembre de 2006, 03:14:35 PM
Hace mucho q no lo uso, pero creo recordar que habria que usar miArray[3]->Invoke(40.0f, 7, 'a');

SUERTE ^^
Título: Llamar a una función de forma dinámica.
Publicado por: AK47 en 29 de Noviembre de 2006, 05:18:05 PM
Invoke? Mmmm, creo que te has confundido con el C#. No es ese el mecanismo de los delegates?
Título: Llamar a una función de forma dinámica.
Publicado por: Vicente en 29 de Noviembre de 2006, 06:49:23 PM
Argh, una "->" en C#, dios me salve! :p
Título: Llamar a una función de forma dinámica.
Publicado por: AK47 en 29 de Noviembre de 2006, 08:24:14 PM
Bueno bueno, yo lo decia por el "invoke"  :oops:  El -> es claramente de C/C++ ;)
Título: Llamar a una función de forma dinámica.
Publicado por: shephiroth en 29 de Noviembre de 2006, 09:53:49 PM
Cierto, el invoke es de los delegados....pero respecto a c# te confundes, los delegados son "tecnologia" del .net, no son exclusivos de c# que como bien te dijeron, en # el -> es sacrilegio xDD

SALUDOS ^^
Título: Llamar a una función de forma dinámica.
Publicado por: pablomatico en 30 de Noviembre de 2006, 10:22:39 AM
Muchisimas gracias a todos por las respuestas, en cuanto salga del trabajo lo pondré en práctica y ya os contaré si lo consigo o no.

Saludoss