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.

¿Puede C++ deducir el tipo de argumento a partir del valor predeterminado?

Intenté escribir esta función con un argumento de plantilla predeterminado:

template<typename a,="" typename="" b="">
void func(int i1, int i2, A a, B b = 123){
...
}

En mi mente puedo llamarla así: func(1, 2, 3) y el compilador debería deducir el tipo B como int a partir del valor predeterminado, pero obtengo “ninguna instancia de función sobrecargada”.

¿Es una construcción incorrecta de C++ y el compilador no puede deducir el tipo en este caso?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, su suposición es incorrecta. El compilador no puede deducir el tipo B en este caso, incluso con el valor predeterminado proporcionado. Esto se debe a que los argumentos predeterminados solo funcionan para los parámetros de función que están en la cola. En su ejemplo, B b no es un parámetro de cola ya que todavía hay el parámetro int i2 después de él.

    Para hacerlo funcionar, puede proporcionar un tipo para B al llamar a la función func <int> o reordenar los parámetros para que B b se convierta en el último parámetro. Aquí está un ejemplo de este último:

    “`
    template
    void func(int i1, int i2, A a, B b = 123){

    }

    // Ahora puede llamarlo así:
    func (1, 2, 3); // B se deducirá como int
    “`

Comments are closed.