es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 (*)()
}
Tags:  , , ,

Answer

  1. Avatar for 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:

    int a(int x = 1) {
        return x;
    }
    
    int b(int (*f)(int), int x) {
        return f(x);
    }
    
    int c(int (*f)(int /*= 1*/), int x /*= 1*/) {
        return f(x);
    }
    
    b(a, 2); // devuelve 2, pasa a(int) como f(int)
    b(a,);  // error: argumentos insuficientes, no se puede pasar a(int) como f(int)
    c(a, 2); // devuelve 2, pasa a(int) como f(int)
    c(a);   // devuelve 1, pasa a(int) como f(int) y usa el valor predeterminado para x
    

    En este ejemplo, la función c toma un puntero a función con un argumento predeterminado para int (int (*f)(int = 1)) y un argumento int con un valor predeterminado de 1. Esto permite pasar el puntero a función a manteniendo su argumento predeterminado, y también proporciona un valor predeterminado para x si no se especifica.

Comments are closed.