Maison >développement back-end >C++ >Pourquoi mon compilateur ne parvient-il pas à déduire les arguments de modèle dans les fonctions surchargées ?
Problèmes de déduction des arguments de modèle en cas de surcharge de fonctions
Vous avez rencontré un problème où le compilateur ne parvient pas à déduire les arguments de modèle lors de l'appel de fonctions surchargées. Examinons les raisons de ce comportement.
Votre code définit deux fonctions de modèle, chacune avec des arguments et des types de retour spécifiques. Cependant, l'utilisation explicite du nom de type S::type crée des contextes non déduits pour les paramètres de modèle A et B. Selon la section 14.8.2.4 de la norme C (2003), les paramètres de modèle qui apparaissent uniquement dans des contextes non déduits ne sont pas pris en compte pour déduction d'arguments.
Dans votre fonction principale, vous essayez d'appeler ces fonctions surchargées avec des valeurs entières, par exemple temp(c) et temp2(d, 7). Le compilateur ne peut pas déduire les arguments du modèle car c est de type char et d est de type int, pourtant ces arguments ne sont utilisés que dans des contextes non déduits.
Pour résoudre ce problème, vous devez spécifier explicitement les arguments du modèle dans votre appels. Par exemple, pour appeler temp avec un argument char, vous écrivez temp
En comprenant le concept de contextes non déduits et les exigences de déduction des arguments de modèle, vous pouvez éviter ces pièges et vous assurer que votre code se compile avec succès.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!