Hello !
Allez, chui fou : deux questions dans le même thread car la question 2 est une suite logique de la question 1 Pour ceux qui n'ont pas suivi mes précédentes aventures, j'apprends le C++ et je bosse sur MCU. Mon apprentissage m'amène vers les templates. J'ai lu plusieurs cours sur le sujet et j'ai compris (pas les variadics encore...) comment ça marche et à quoi ça sert. Le hic c'est que je vois à quoi ça sert mais je n'y vois pas beaucoup d'application vraiment cools. J'ai vu des trucs trop simples comme des fonctions min(), des trucs moins simples mais pas trop utiles (en tout cas pour moi) comme des conteneurs, et enfin des trucs tellement compliqués que j'ai rien compris.
Ma première question concerne l'utilisation pour faire des classes. Voici un code exemple :
En regardant le code assembleur généré avec Compiler Explorer, je vois que la méthode avec un template génère moins de code, mais cela ne devient plus vrai dés que je fais une seconde instanciation du template car la méthode draw() se retrouve dupliquer. Mon exemple est très simpliste, peut-être trop... La question est donc "quel est l'intérêt d'utiliser des classes templates plutôt que des classes "normales" avec un constructeur ?
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
35
36
37 class ClassicDisplay { public: ClassicDisplay(unsigned int width, unsigned int height) : width_m(width), height_m(height_m) {} void draw() { } unsigned int width_m; unsigned int height_m; }; template<unsigned int __width, unsigned int __height> class TemplateDisplay { public: void draw() { } unsigned int width = __width; unsigned int height = __height; }; int main() { ClassicDisplay cd(320, 240); TemplateDisplay<320, 240> td; cd.draw(); td.draw(); return cd.width_m + td.height; }
Ma seconde question va être un peu en mode stackoverflow : pouvez-vous de me donner des exemples concrets (sans aller dans l'inbitable) d'utiliser des templates ?
Merci d'avance !
Partager