Maison > développement back-end > C++ > Comment la déduction du modèle C détermine-t-elle la spécialisation à l'aide d'un ordre partiel ?

Comment la déduction du modèle C détermine-t-elle la spécialisation à l'aide d'un ordre partiel ?

Linda Hamilton
Libérer: 2024-12-02 10:20:12
original
276 Les gens l'ont consulté

How Does C   Template Deduction Determine Specialization Using Partial Ordering?

Procédure de commande partielle dans la déduction de modèle

La procédure de commande partielle détermine la relation de spécialisation entre les modèles de fonction dans la déduction de modèle C. Cela implique de créer des types de fonctions transformés pour chaque modèle et de les utiliser à des fins de comparaison.

  1. Types de fonctions transformés :
    Pour chaque modèle, un type de fonction transformé est créé en remplaçant des types de fonctions uniques types pour les paramètres de modèle dans son type de fonction.
  2. Arguments correspondants et Paramètres :
    Le type de fonction transformé d'un modèle est comparé au modèle de fonction d'origine de l'autre modèle, en utilisant les deux cas suivants :

    • Type-1 transformé comme modèle d'argument et modèle d'origine-2 comme modèle de paramètre
    • Type-2 transformé en modèle d'argument et modèle d'origine-1 comme paramètre modèle
  3. Match Success and Ordering :
    Si la déduction de type peut faire correspondre avec succès le type de fonction transformé au modèle de fonction d'origine dans les deux cas, un modèle est plus spécialisé que l’autre. Si une correspondance réussie se produit dans les deux sens, aucun des deux modèles n'est plus spécialisé.

Exemple :

Considérez ces deux modèles de fonctions :

template<typename T, typename U>
void foo(T, U); // original #1

template<typename T>
void foo(T const*, X<T>); // original #2
Copier après la connexion

Correspondance aux types transformés :

  • 1b vs. #2 : Type La déduction ne peut pas correspondre aux paramètres.

  • 2b vs. #1 : La déduction de type peut correspondre aux paramètres (T = char const*, U = X).

Conclusion : La surcharge n°2 est plus spécialisée que la surcharge n°1.

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