Échec de la déduction des arguments du modèle : compréhension des contextes non déduits
Dans votre code, vous avez défini deux fonctions (temp et temp2) qui visent à déduire les arguments du modèle en fonction des types de paramètres. Cependant, vous rencontrez des erreurs du compilateur indiquant qu'il est incapable de déduire ces arguments.
Le problème vient de l'utilisation du mot-clé typename dans les définitions de fonction :
// Example 1 template <class A> A temp(typename S<A>::type a1) // Example 2 template <class A, class B> B temp2(typename S<A>::type a1, B a2)
Lors de l'utilisation des paramètres de modèle de modèle , typename est nécessaire pour faire référence aux noms dépendants au sein de la classe modèle. Cependant, ce n'est pas le cas dans le contexte de vos fonctions, où S::type est simplement un type non dépendant.
En C , la déduction d'argument de modèle se produit lorsqu'un paramètre de modèle est utilisé dans un contexte qui détermine son type. Cependant, dans ce cas, le paramètre template A est utilisé dans un contexte non déduit, car il apparaît uniquement dans la déclaration d'un type référence :
typedef typename T& type;
De ce fait, le compilateur ne peut pas déduire l'argument template de l'appel de fonction. Pour résoudre ce problème, vous devez spécifier explicitement l'argument du modèle lors de l'appel de ces fonctions :
temp<char>(c);
En fournissant l'argument explicite, le compilateur est capable d'instancier correctement le modèle avec le type approprié.
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!