Salut a tous
Voila j'etais entrain de lire des tutos sur les templates
le probléme je vois pas a quoi vont servire les classes ou les fonctions templates
Salut a tous
Voila j'etais entrain de lire des tutos sur les templates
le probléme je vois pas a quoi vont servire les classes ou les fonctions templates
A beaucoup de choses. Principalement à avoir du code qui s'adapte aux structures de données de son utilisateur final. Exemple bâteau : Tu veux mettre en place une classe de type liste chaînée. Ce qui est important à ce niveau, c'est la structure de la liste elle même. Ce qui sera dedans, peu importe. Pour parvenir à dire ce "peu importe" dans du code, il y a plusieurs solutions :
- Toutes les variétés de ce "peu importe" dériveront d'une classe de base, ou bien sera connu uniquement sous forme de pointeur void*. Outre le coût, cette solution demande à l'utilisateur de cette liste de passer outre le système de type, ce qui rend le code dangereux. C'est comme ça que faisaient Java ou C# dans leurs premières versions, ils sont revenus en arrière pour mettre en place un truc apparenté au templates.
- On fait tout par macro. Je crois que certains faisaient ainsi avant les templates en C++. Je n'ai heureusement jamais connu cette époque de martyrs.
- On fait une liste par type d'objet que l'on veut mettre dedans, par copier/coller/remplacer/adapter à partir d'une liste de base (c'est comme ça que font certains en C#1.0, peut-être aussi en vieux Java...).
- On fait par templates, qui sont de ce point de vue une façon d'automatiser le copier/coller/remplacer/adapter. Sachant que ce qui était nécessaire pour faire marcher le "adapter" permet d'aller bien plus loin que ce que les designers des templates avaient prévu. Mais c'est une autre histoire...
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
J'ajouterais à cela :
http://alp.developpez.com/tutoriels/traitspolicies/
http://alp.developpez.com/tutoriels/templaterebinding/
http://loulou.developpez.com/tutoriels/cpp/metaprog
Et de nombreux sujets sur le forum
Un point important qui n'est pas connu d'assez de monde, c'est que les templates permettent une forme de polymorphisme statique... Un polymorphisme qui est utilisé à la compilation, exemple :
Tu peux en savoir plus sur ce genre d'utilisation des templates en lisant le premier lien que je t'ai donné ainsi qu'en faisant une recherche sur "templates" et/ou "polymorphisme statique" et/ou "politique", dans le forum C++.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 template <class Animal> class GestionAnimal { public : void faireBruit() { Animal::bruit(); } }; class Chien { static void bruit() { std::cout << "Ouaf ouaf" << std::endl; } }; class Chat { static void bruit() { std::cout << "Miaou miaou" << std::endl; } }; // ... GestionAnimal<Chien> gc; gc.faireBruit(); // affiche "Ouaf ouaf" GestionAnimal<Chat> gc2; gc.faireBruit(); // affiche "Miaou miaou"
Voilà
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Merci infiniment Alp mais je pense qu'il une petite erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Compiling... template1.cpp C:\Program Files\Microsoft Visual Studio\MyProjects\template1\template1.cpp(17) : error C2248: 'bruit' : cannot access private member declared in class 'Chien' C:\Program Files\Microsoft Visual Studio\MyProjects\template1\template1.cpp(23) : see declaration of 'bruit' C:\Program Files\Microsoft Visual Studio\MyProjects\template1\template1.cpp(16) : while compiling class-template member function 'void __thiscall GestionAnimal<class Chien>::faireBruit(void)' Error executing cl.exe.
remplacepar
Code : Sélectionner tout - Visualiser dans une fenêtre à part class Chien
.
Code : Sélectionner tout - Visualiser dans une fenêtre à part struct Chien
De même pour Chat
"Never use brute force in fighting an exponential." (Andrei Alexandrescu)
Mes articles dont Conseils divers sur le C++
Une très bonne doc sur le C++ (en) Why linux is better (fr)
Effectivement, David a raison, j'ai écrit trop vite
Le soucis est que l'accessibilité est privée par défaut dans les classes, publique dans les structures.
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager