Échec de la déduction dans l'inférence de type de modèle
Lorsque vous tentez de déduire des arguments de modèle à partir d'un membre de type, il est crucial de s'assurer que le contexte est déductible. Dans le code donné, l'erreur se produit dans la fonction de test lorsque le compilateur tente de déduire l'argument du modèle T du nom de type TMap
Cet échec découle du concept de "contexte non déductible ". Dans ce cas, le type de membre 'Type' du type de modèle TMap
Considérons une spécialisation hypothétique de TMap :
template <> struct TMap<SomeType> { typedef std::map<double, double> Type; };
Si le compilateur devait déduire T de TMap
Spécialisation supplémentaire de TMap :
template <> struct TMap<OtherType> { typedef std::map<double, double> Type; };
La situation s'aggrave, car maintenant ce qui suit est valable :
Compte tenu de cette ambiguïté, le compilateur ne peut pas déterminer si T est SomeType ou OtherType. Il ne peut pas non plus déterminer le nombre de choix possibles ni identifier ces choix.
Par conséquent, dans des contextes comme celui-ci où le type de membre du modèle n'a pas de relation directe avec l'argument du modèle, la déduction de l'argument du modèle échoue et le compilateur génère un erreur.
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!