Bonjour,
Je m'initie aux templates mais certains points me paraissent confus
et je m'embrouille, (je crois qu'en fait j'ai tendance à faire une confusion
entre les templates et typedef)
Je vais prendre un bout d'exemple classique de liste chainée générique
Je comprend la variable
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 template <typename T> class CList; template <typename TYPE> class CElement { friend class CList<TYPE>; private : //CONSTRUCTEURS CElement() {next = prev = NULL;} CElement(const TYPE &d) { data = d; next = prev = NULL; } //VARIABLES MEMBRES TYPE data; //L'information contenue dans l'élément. CElement<TYPE> *next; //L'adresse de l'élément suivant. CElement<TYPE> *prev; //L'adresse de l'élément précédent. };
où TYPE est remplacé par le type que l'on veut manipuler int, double etc....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TYPE data;
mais je comprend moins le sens de
et encore moins
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CElement<TYPE> *next;
puisque dans la déclaration (plus haut) typename est définit par T et non pas TYPE
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 friend class CList<TYPE>;
Je suppose que dans ce cas TYPE n'est plus un alias censé être remplacé par le type qu'on veut utiliser.
Est ce une convention pour dire au compilo qu'il a affaire à une classe "templatisée" ?
Si quelqu'un pouvait m'éclairer.
Merci d'avance
Partager