Maison >développement back-end >C++ >Modèles de fonctions C : surcharge ou spécialisation partielle (non standard) ?

Modèles de fonctions C : surcharge ou spécialisation partielle (non standard) ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-02 20:58:12340parcourir

C   Function Templates: Overloading vs. (Non-Standard) Partial Specialization?

Modèles de fonctions : spécialisation partielle ou surcharge

En C, la spécialisation partielle des modèles de fonctions n'est pas autorisée par la norme du langage. Cependant, certains compilateurs peuvent fournir des extensions qui le permettent.

Spécialisation partielle définie

La spécialisation partielle implique la définition d'un modèle avec un ensemble d'arguments de modèle plus spécialisé que le modèle d'origine. . Pour les modèles de classe, cela implique de spécifier des valeurs spécifiques pour tout ou partie des paramètres du modèle.

Exemple : spécialisation partielle et surcharge

Le code fourni démontre une surcharge, et non une surcharge. spécialisation. Les fonctions suivantes sont définies :

template<typename T1, typename T2>
inline T1 max(T1 const& a, T2 const& b)
{
    return a < b ? b : a;
}

template<typename T>
inline T const& max(T const& a, T const& b)
{
    return 10;
}

Bien que les paramètres de modèle de la deuxième fonction soient de type identique, il ne s'agit pas d'une spécialisation partielle. Il s'agit d'une fonction distincte qui surcharge la première fonction.

Spécialisation des modèles de fonctions

La spécialisation complète des modèles de fonctions, en revanche, est autorisée. Cela implique de définir un modèle avec tous les paramètres du modèle explicitement spécifiés. Cependant, il n'est pas directement pris en charge par le standard C et n'est implémenté que dans certains compilateurs en tant qu'extension.

Extensions du compilateur de spécialisation partielle

Dans Microsoft Visual Studio 2010 Express , l'extension du compilateur permet une spécialisation partielle pour les classes et les modèles de fonctions. Ce n'est pas un comportement standard et peut entraîner des problèmes de portabilité.

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!

Déclaration:
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