Spécialisation partielle des modèles de fonctions en C : une explication
En C, la spécialisation partielle des modèles de fonctions n'est pas autorisée par la norme. Cependant, certains compilateurs, tels que Microsoft Visual Studio 2010 Express, peuvent autoriser la spécialisation partielle en tant qu'extension.
La spécialisation partielle des modèles de fonctions implique de définir une implémentation spécifique pour un modèle avec un ensemble particulier d'arguments. Contrairement aux modèles de classe, qui autorisent une spécialisation complète et partielle, les modèles de fonction ne prennent en charge que la spécialisation complète.
Considérez le code suivant :
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; }
Ce code semble spécialiser partiellement le modèle de fonction max pour arguments du même type. Il ne s’agit cependant pas ici d’une spécialisation partielle. Au lieu de cela, le deuxième modèle de fonction est une version surchargée du premier, avec le même nom mais des types de paramètres différents.
La syntaxe d'une spécialisation partielle d'un modèle de fonction, si elle était autorisée, ressemblerait à ce qui suit :
template <typename T> inline T const& max<T, T>(T const& a, T const& b) { return a; }
Dans le code fourni, la deuxième fonction max est surchargée pour gérer les cas où les deux arguments ont le même type. Il ne s'agit pas d'une spécialisation partielle mais plutôt d'une surcharge basée sur les types d'arguments.
Il est important de noter que les compilateurs qui prennent en charge la spécialisation partielle des modèles de fonctions peuvent autoriser du code non conforme à la norme C. Le code portable devrait éviter de s'appuyer sur de telles extensions.
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!