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!