La spécialisation des modèles et la spécialisation partielle sont des mécanismes uniques en C++. Les spécialisations de modèles fournissent des implémentations spécifiques pour des types spécifiques de paramètres de modèle, tandis que les spécialisations partielles de modèles permettent de saisir des modèles en fonction de certains paramètres de modèle, ce qui rend leur utilisation plus flexible. Les spécialisations de modèle utilisent la syntaxe de modèle, tandis que les spécialisations partielles de modèle utilisent la syntaxe de modèle
Spécialisation de modèle et spécialisation partielle de modèle en C++
Spécialisation de modèle
La spécialisation de modèle fait référence à la fourniture explicite d'une implémentation de modèle spécifique pour un type spécifique de paramètre de modèle. La syntaxe est la suivante :
template <> class MyClass<MyType> { // 特化代码 };
Exemple :
template <typename T> class MyClass { T value; public: MyClass(T v) : value(v) {} T getValue() { return value; } }; template <> class MyClass<int> { int value; public: MyClass(int v) : value(v) {} int getValue() { return value * 2; } }; int main() { MyClass<string> strObj("Hello"); cout << strObj.getValue() << endl; MyClass<int> intObj(5); cout << intObj.getValue() << endl; }
Sortie :
Hello 10
Spécialisation partielle de modèle
Une spécialisation partielle de modèle est une spécialisation de modèle spéciale qui permet de saisir des modèles en fonction d'une partie du paramètres du modèle. La syntaxe est la suivante :
template <typename T, typename U> class MyClass { // ... }; template <typename T> class MyClass<T, T> { // 偏特化代码 };
Exemple :
template <typename T, typename U> class MyClass { T value1; U value2; public: MyClass(T v1, U v2) : value1(v1), value2(v2) {} T getValue1() { return value1; } U getValue2() { return value2; } }; template <typename T> class MyClass<T, T> { public: MyClass(T v) : value1(v), value2(v) {} T getValue1() { return value1; } T getValue2() { return value2; } }; int main() { MyClass<string, int> strIntObj("Hello", 5); cout << strIntObj.getValue1() << ", " << strIntObj.getValue2() << endl; MyClass<int> intObj(10); cout << intObj.getValue1() << ", " << intObj.getValue2() << endl; }
Sortie :
Hello, 5 10, 10
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!