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;
}