Fonctionnement des templates ?
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
Code:
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.
}; |
Je comprend la variable
où TYPE est remplacé par le type que l'on veut manipuler int, double etc....
mais je comprend moins le sens de
et encore moins
Code:
1 2
|
friend class CList<TYPE>; |
puisque dans la déclaration (plus haut) typename est définit par T et non pas 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