¿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?
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ámetroint i2
después de él.Para hacerlo funcionar, puede proporcionar un tipo para
B
al llamar a la funciónfunc <int>
o reordenar los parámetros para queB 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
“`