Maison > développement back-end > C++ > Pourquoi la déduction des arguments de mon modèle C échoue-t-elle dans des contextes non déduits ?

Pourquoi la déduction des arguments de mon modèle C échoue-t-elle dans des contextes non déduits ?

Barbara Streisand
Libérer: 2024-12-06 09:45:13
original
940 Les gens l'ont consulté

Why Does My C   Template Argument Deduction Fail in Nondeduced Contexts?

É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)
Copier après la connexion

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;
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal