La Web del Programador: Comunidad de Programadores
 
    Pregunta:  6025 - FUNCIONES COMO PARAMETROS DE OTRAS FUNCIONES
Autor:  julian castrillon
como puedo hacer que una funcion me reciba como parametros otras funciones. la funcion que las recibira esta hecha de antemano y las funciones parametros seran ingresadas por un usuario y el progama recibira esas funciones del usuario y realizara lo que en ellas se diga como es posible hacer esto??

si tienen ejemplos o sugerencias les agradeceria mucho

muchas gracias de antemano

  Respuesta:  Javier Gutierrez
Su pregunta es muy sencilla. Cualquier libro medianamente decente sobre ANSI c++ (NO sobre VisualC++ o similares) contiene la respuesta.

Sin entrar en muchos detalles: una función no es más que una dirección de memoria, luego se puede declarar un puntero que apunte a dicha función. Ejemplo:

typedef int (*puntero_a_funcion)();
// Declara un tipo de dato llamado puntero_a_funcion que podrá apuntar a cualquier funcion que devuelva un int y no admita parametros

int soyCinco() { return 5; };
// Una funcion que se ajusta al tipo de funciones anterior

int quienSoy( puntero_a_funcion puntero) {
// puntero puede apuntar a cualquier funcion que devuelva un entero y no admita parametros
cout<// Ejecutamos la funcion
};

main() {
quienSoy(soyCinco);
// Obtenemos "5" por pantalla
};
La notación puede resultar un poco extraña. Primero, el uso de los paréntesis en el typedef debe ponerse así. Segundo, &soyCino y soyCinco son la misma cosa. Tercero *puntero y puntero son la misma cosa. Cuarto, he escrito esto de cabeza por lo que puede que haya algún fallo de notación, aunque la idea es correcta.

Saludos.