Spécialisation partielle des modèles de fonctions ou surcharge ?
En C, on croit souvent à tort qu'une spécialisation partielle est possible pour les modèles de fonctions. Cependant, le standard C n'autorise que la spécialisation complète.
Surcharge vs spécialisation partielle
Le code fourni initialement :
#include <iostream> 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; }
ne démontrer une spécialisation partielle mais une surcharge de la fonction max. La surcharge permet plusieurs fonctions avec le même nom mais des types d'arguments différents.
Concept de spécialisation partielle
La spécialisation partielle se produit lorsqu'une classe ou un modèle de fonction est spécialisé pour un ensemble spécifique. des paramètres du modèle. Pour les classes, ceci est réalisé en fournissant un modèle spécialisé portant le même nom mais avec moins de paramètres. Pour les modèles de fonctions, la spécialisation partielle impliquerait de spécifier uniquement un sous-ensemble des paramètres du modèle, ce qui n'est actuellement pas autorisé par la norme C.
Exemple de spécialisation de classe partielle
La spécialisation partielle pour les classes ressemble à ceci :
template <typename T1, typename T2> class MyClass { // ... }; // Partial specialization: both template parameters have the same type template <typename T> class MyClass<T, T> { // ... };
Compilateur Extensions
Certains compilateurs, tels que Microsoft Visual Studio 2010 Express, peuvent fournir une spécialisation partielle pour les modèles de fonctions en tant qu'extension. Cependant, l'utilisation de telles extensions compromet la portabilité du code, car d'autres compilateurs peuvent ne pas les prendre en charge.
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!