Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Introduction à la spécialisation de modèles | Spécialisation de Template
Templates C++

Introduction à la spécialisation de modèles

Glissez pour afficher le menu

Un template général fonctionne pour tout type de données. Cependant, certains types peuvent nécessiter un traitement particulier. Par exemple, si vous implémentez une fonction qui se comporte différemment pour les types int et std::string, la spécialisation de template permet de définir une version différente du template pour chaque type.

main.cpp

main.cpp

123456789101112
#include <iostream> template<typename T> T square(T value) { return value * value; } int main() { std::cout << square<int>(25); std::cout << square<std::string>("5"); }

Si vous exécutez le code ci-dessus, vous rencontrerez une erreur. Cela se produit parce que std::string ne prend pas en charge l'opérateur *. Il est donc nécessaire d'indiquer au compilateur comment gérer un std::string passé en paramètre.

Fonctionnement interne des templates

Pour l’instant, vous apprenez les bases des templates, en particulier les templates de fonctions. Vous avez vu comment les créer, utiliser des listes de paramètres et appeler les fonctions avec différents types de données. Vous pourriez vous demander pourquoi, dans ce cas, il ne suffirait pas de surcharger les fonctions pour tous les types numériques disponibles en C++. Bien que cette approche puisse fonctionner pour cet exemple, il est important de se rappeler que les templates sont un outil bien plus puissant.

main.cpp

main.cpp

12345678910111213
#include <iostream> struct myStruct {}; class myClass {}; template<typename T> void TemplateFunction() { std::cout << typeid(T).name() << std::endl; } int main() { TemplateFunction<myClass>(); TemplateFunction<myStruct>(); }

Les templates peuvent accepter n’importe quel type de données, y compris les types définis par l’utilisateur. À l’inverse, se reposer uniquement sur la surcharge de fonctions nécessiterait de créer une nouvelle fonction pour chaque type, rendant les mises à jour fastidieuses et sujettes aux erreurs. Par conséquent, on ne peut pas se contenter de la surcharge de fonctions et il faut utiliser la spécialisation de templates pour résoudre des problèmes comme ceux rencontrés avec la fonction template square.

question mark

Pourquoi le template de fonction square dans l'exemple produit-il une erreur lorsque std::string est utilisé ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 1

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Section 4. Chapitre 1
some-alt