Advertisement
Miquel_Fuster

Function decorator

Aug 3rd, 2022
1,479
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.11 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. // fptr es un puntero a una función que recibe dos datos de tipo entero y devuelve un entero
  4. typedef int (*fptr)(int, int);
  5.  
  6. // No se pueden anidar funciones así que se necesita un dato global para que puedan compartir información.
  7. // fexec contendrá la función que realiza el trabajo real
  8. fptr fexec;
  9.  
  10. // Función que realizará el trabajo real
  11. int suma(int a, int b) {
  12.     puts("Dentro de suma");
  13.     return a + b;
  14. }
  15.  
  16. // 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.
  17. int envoltorio_func(int a, int b) {
  18.     puts("Decorador antes de llamar a la función");
  19.     int c = fexec(a, b);
  20.     puts("Decorador después de llamar a la función");
  21.     return c;
  22. }
  23.  
  24. // Introduce en fexec la función de trabajo y devuelve la función envoltorio que la va a utilizar.
  25. fptr decorador(fptr func) {
  26.     fexec = func;
  27.     return envoltorio_func;
  28. }
  29.  
  30. // Ejecución del programa
  31. int main() {
  32.     fptr funcion_decorada = decorador(suma);
  33.     funcion_decorada(5, 8);
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement