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 ?

Pourquoi mon compilateur ne parvient-il pas à déduire les arguments de modèle dans les fonctions surchargées ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-25 05:47:141000parcourir

Why Does My Compiler Fail to Deduce Template Arguments in Overloaded Functions?

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(c). Cela forcera le compilateur à utiliser la spécialisation de modèle correcte en fonction du type d'argument spécifié.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn