Maison > développement back-end > C++ > Comment l'ordre partiel détermine-t-il la spécialisation entre les modèles de fonctions ?

Comment l'ordre partiel détermine-t-il la spécialisation entre les modèles de fonctions ?

Barbara Streisand
Libérer: 2024-12-02 07:18:12
original
774 Les gens l'ont consulté

How Does Partial Ordering Determine Specialization Between Function Templates?

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

La procédure de commande partielle dans la déduction de modèle détermine la relation de spécialisation entre deux modèles de fonction. Elle comporte deux étapes :

Étape 1 : Transformation

Pour chaque modèle, la procédure de commande partielle crée un "type de fonction transformé" en remplaçant tous les types, non-types et des paramètres de modèle de modèle avec des types uniques et inutilisés.

Étape 2 : Comparaison

Les types de fonctions transformés sont comparés de deux manières :

  • Correspondance directe : Le type de fonction transformé du modèle 1 est comparé à l'original type de fonction du modèle 2.
  • Correspondance arrière : Le type de fonction transformé du modèle 2 est comparé au type de fonction d'origine du modèle 1.

Si l'une des correspondances réussit et que l'autre échoue, alors le modèle avec la correspondance réussie est considéré comme plus spécialisé. Si aucune des correspondances ne réussit, aucun modèle n'est plus spécialisé.

Exemple :

Considérez les deux modèles de fonction suivants :

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

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

Pour déterminer quel modèle est le plus spécialisé, nous :

1. Créer des types de fonctions transformées :

  • Modèle 1 transformé : void foo(int, bool)
  • Modèle 2 transformé : void foo(char const*, X)

2. Comparez les types de fonctions transformées :

  • Correspondance directe : void foo(int, bool) ne peut pas être mis en correspondance avec void foo(T const*, X).
  • Correspondance ascendante : void foo(char const*, X) peut être mis en correspondance avec void foo(T, U) en déduisant T = char const* et U = X.

Conclusion : Le modèle 2 est plus spécialisé que le modèle 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