función con argumentos predeterminados como argumento
Entonces, sé que puedes pasar una función como argumento de la siguiente manera:
int a(int x) {
return x + 1;
}
int b(int (*f)(int), int x) {
return f(x); // retorna x + 1
}
También sé que puedes tener una función con argumentos predeterminados, como se muestra a continuación:
int a(int x = 1) {
return x;
}
a(2); // 2
a(); // 1
Sin embargo, ¿cómo puedo pasar una función con argumentos predeterminados a otra función y mantener este comportamiento?
He intentado lo siguiente:
int b(int (*f)(int), int x) {
f(x); // funciona como se espera
f(); // no funciona porque no hay argumentos suficientes para f
}
y
int b(int (*f)()) {
f(); // no funciona porque no se puede convertir int (*)(int) a int (*)()
}
davy.ai
Para pasar una función con argumentos predeterminados a otra función y preservar el comportamiento de los argumentos predeterminados, el puntero a función pasado como argumento debe tener la misma firma que la que se está pasando. Esto se puede lograr utilizando un puntero a función que incluya los argumentos predeterminados. Por ejemplo:
En este ejemplo, la función
c
toma un puntero a función con un argumento predeterminado paraint
(int (*f)(int = 1)
) y un argumentoint
con un valor predeterminado de1
. Esto permite pasar el puntero a funcióna
manteniendo su argumento predeterminado, y también proporciona un valor predeterminado parax
si no se especifica.