Maison >développement back-end >C++ >Pourquoi C ne peut-il pas déduire des arguments de modèle dans des contextes non déductibles ?
Pourquoi C ne peut-il pas déduire T dans des contextes non déductibles ?
Dans l'extrait de code donné, une structure de modèle TMap est définie avec un type imbriqué Type qui représente la spécialisation de std::map en utilisant l'argument de modèle T. Cependant, le compilateur ne parvient pas à déduire T dans la fonction test.
Contexte non déductible
L'erreur se produit car le code appelle test avec un argument qui a le type typename TMap
Ambiguïté dans l'inférence de type
Dans un contexte non déductible, le compilateur est impossible de déduire l'argument du modèle car le type de l'argument ne détermine pas de manière unique T. Par exemple, considérons ce qui suit scénario :
template <> struct TMap<SomeType> { typedef std::map<double, double> Type; }; template <> struct TMap<OtherType> { typedef std::map<double, double> Type; };
Dans ce cas, TMap
Conséquences
La limitation des contextes non déductibles a des implications importantes :
Atténuation
Pour atténuer cette limitation, on peut utiliser des techniques telles que les arguments de modèle de modèle ou std::is_same_v de C 20 pour déduire manuellement les arguments de modèle ou fournir un paramètre de modèle explicite. listes.
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!