Maison > développement back-end > C++ > Pourquoi la déduction du type de modèle échoue-t-elle lors de la déduction à partir d'un type de membre ?

Pourquoi la déduction du type de modèle échoue-t-elle lors de la déduction à partir d'un type de membre ?

Barbara Streisand
Libérer: 2024-12-19 09:24:10
original
196 Les gens l'ont consulté

Why Does Template Type Deduction Fail When Inferring from a Member Type?

É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::Type.

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 n'a aucune relation inhérente avec l'argument de modèle T.

Considérons une spécialisation hypothétique de TMap :

template <>
struct TMap<SomeType> {
    typedef std::map<double, double> Type;
};
Copier après la connexion

Si le compilateur devait déduire T de TMap::Type, il se heurterait à une ambiguïté. La valeur de TMap::Type est std::map. Cependant, il n'est pas garanti que T dans TMap est le même que SomeType dans la spécialisation.

Spécialisation supplémentaire de TMap :

template <>
struct TMap<OtherType> {
    typedef std::map<double, double> Type;
};
Copier après la connexion

La situation s'aggrave, car maintenant ce qui suit est valable :

  • TMap
  • TMap::Type = std::map

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!

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