Dev - C++ - Puntero a Funciones

 
Vista:

Puntero a Funciones

Publicado por laura (8 intervenciones) el 12/08/2003 09:31:00
Hola, estoy trabajando con punteros a funciones en C++, pero me gustaría saber como realizo esa llamada si me pasan el nombre de la función a llamar en una variable de tipo AnsiString.
typedef void(*TFuncion)();
TFuncion X;
X="Calcula"; ???, el nombre de la función es dinámico, según lo que el usuario introduzca en una caja de texto.
Os doy las gracias por adelantado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Puntero a Funciones

Publicado por enrique (1 intervención) el 19/08/2003 14:37:04

Un putero a función no es más que un puntero, es decir, una dirección. Lo que intentas hacer es corresponder un valor con la dirección de la función que quieres llamar.
Es cómo llamar a la función myFunction() cuado el usuario introduce la cadena "MyFunction". En ambos casos sabes de antemano cuáles son las funciones y cuales los valores que se deben introducir para llamar a esas funciones.

El siguiente método muy básico; si quieres algo más avanzado házmelo saber y te envío un ejemplo con tablas hash.

Espero no haber malinterpretado tu pregunta y que esta esa la respuesta.

// --------------------------------------------------------
// --------------------------------------------------------

(Suponiendo que tu AnsiString implemente los operadores ==, << y >>)

// --------------------------------------------------------
// --------------------------------------------------------

#include <iostream> // cin, cout
#include <string> // string
using namespace std;

// --------------------------------------------------------

void calcula() {
cout << "Cacula" << endl;
}

void muestra(){
cout << "Muestra" << endl;
}

void salir(){
cout << "Salir" << endl;
}

void error(){
cout << "Funcion desconocida" << endl;
}

// --------------------------------------------------------

typedef void(*TFuncion)();

// --------------------------------------------------------

int main () {

string nombre; // Sustituir por AnsiString
TFuncion f = NULL;

cout << "Introduzca la función a llamar: ";
cin >> nombre;

if (nombre == "calcula") {

f = calcula;

} else if (nombre == "muestra") {

f = muestra;

} else if (nombre == "salir") {

f = salir;

} else {// Invalid function

f = error; // O déjalo NULL, pero recuerda verificarlo
}

// [...] Luego

if (f) { // f != NULL
f();
}

return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Puntero a Funciones

Publicado por Laura (8 intervenciones) el 24/09/2003 12:15:20
Hola Enrique, lo primero es darte las gracias por contestar y lo segundo, es que acabo de ver la respuesta, problemillas con internet... Respecto al correo me has entendido bien pero no quiero ir preguntando con "if" cada uno de los posibles casos que pudiera ser sino que quiero(ejemplo de tu código):

cout << "Introduzca la función a llamar: ";
cin >> nombre;

f=nombre;
Siendo nombre cualquiera de los valores que identifican a la función

Es lo que quiero, que no tenga que preguntar por cada uno de los casos. Si se te ocurre algo..
Gracias,Laura
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar