Tengo la situación en la que una función llama a una de varias funciones posibles. Este parece ser un buen lugar para pasar una función como parámetro. En esta respuesta de Quoara de Zubkov hay tres formas de hacer esto.
int g(int x(int)) { return x(1); }
int g(int (*x)(int)) { return x(1); }
int g(int (&x)(int)) { return x(1); }
...
int f(int n) { return n*2; }
g(f); // all three g's above work the same
¿Cuándo se debe utilizar qué método? ¿Qué hay diferencias? Prefiero el enfoque más simple, ¿por qué no debería usarse siempre la primera forma?
Para mi situación, la función solo se llama una vez y me gustaría que sea simple. Lo tengo trabajando con pasar por puntero y simplemente lo llamo con g(myFunc)
dónde myFunc
está la función que se llama al último.
g(+f);
funciona para los dos primeros, pero no para el tercero.
int g(int x(int))
, x
es un puntero a pesar de que no se parece a uno. La declaración global correspondiente int x(int);
declara una función, no un puntero de función.
x
como puntero.