Maison > développement back-end > C++ > Spécialisation de modèle et spécialisation partielle de modèle en C++ ?

Spécialisation de modèle et spécialisation partielle de modèle en C++ ?

WBOY
Libérer: 2024-05-08 17:33:01
original
886 Les gens l'ont consulté

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 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> {
  // 特化代码
};
Copier après la connexion

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;
}
Copier après la connexion

Sortie :

Hello
10
Copier après la connexion

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> {
  // 偏特化代码
};
Copier après la connexion

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;
}
Copier après la connexion

Sortie :

Hello, 5
10, 10
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal