Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- // fptr es un puntero a una función que recibe dos datos de tipo entero y devuelve un entero
- typedef int (*fptr)(int, int);
- // No se pueden anidar funciones así que se necesita un dato global para que puedan compartir información.
- // fexec contendrá la función que realiza el trabajo real
- fptr fexec;
- // Función que realizará el trabajo real
- int suma(int a, int b) {
- puts("Dentro de suma");
- return a + b;
- }
- // Toma los datos necesarios para fexec, hace un algo antes, ejecuta la función de trabajo y realiza una operación posterior. Devuelve el valor obtenido con la función de trabajo.
- int envoltorio_func(int a, int b) {
- puts("Decorador antes de llamar a la función");
- int c = fexec(a, b);
- puts("Decorador después de llamar a la función");
- return c;
- }
- // Introduce en fexec la función de trabajo y devuelve la función envoltorio que la va a utilizar.
- fptr decorador(fptr func) {
- fexec = func;
- return envoltorio_func;
- }
- // Ejecución del programa
- int main() {
- fptr funcion_decorada = decorador(suma);
- funcion_decorada(5, 8);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement