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èle | Spécialisation de Template
Modèles C++
course content

Contenu du cours

Modèles C++

Modèles C++

1. Création du Premier Modèle
2. Utilisation des Templates
3. Modèles de Classe
4. Spécialisation de Template

book
Introduction à la Spécialisation de Modèle

Un template général fonctionne pour tout type de données. Cependant, certains types peuvent nécessiter un traitement spécial. 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 vous permet de définir une version différente du template pour chaque type.

cpp

main

copy
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 supporte pas l'opérateur *. Il est donc nécessaire d'informer le compilateur sur la façon de gérer un std::string passé en tant que paramètre.

Comment fonctionnent les modèles sous le capot

Pour l'instant, vous saisissez juste les bases des modèles, en particulier les modèles de fonctions. Vous avez appris à les créer, à utiliser des listes de paramètres et à appeler les fonctions avec différents types de données. Vous vous demandez peut-être pourquoi, dans ce cas, nous ne surchargerions pas simplement 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 modèles sont un outil beaucoup plus puissant.

cpp

main

copy
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 modèles peuvent accepter n'importe quel type de données, y compris les types définis par l'utilisateur. En revanche, se fier uniquement à la surcharge de fonctions nécessiterait de créer une nouvelle fonction pour chaque type, rendant les mises à jour lourdes et sujettes à erreur. Par conséquent, nous ne pouvons pas nous fier uniquement à la surcharge de fonctions et devons utiliser des spécialisations de modèles pour résoudre des problèmes comme ceux de la fonction modèle carré.

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

Pourquoi le modèle 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
We're sorry to hear that something went wrong. What happened?
some-alt