Salut
pour ce qui est de la classe CList pour ne prendre que celle-ci
la MSDN dit
.TYPE
Type of object stored in the list.
ARG_TYPE
Type used to reference objects stored in the list. Can be a reference
a quoi peut bien service ARG_TYPE ???
merci








Salut
pour ce qui est de la classe CList pour ne prendre que celle-ci
la MSDN dit
.TYPE
Type of object stored in the list.
ARG_TYPE
Type used to reference objects stored in the list. Can be a reference
a quoi peut bien service ARG_TYPE ???
merci
Le ARG_TYPE, en règle générale, sert à spécifier comment les objets ou littéraux doivent être utilisés. Cela vaut pour les CList comme pour les autres template.
Si on prend un exemple, tu crées un template TOTO sans ARG_TYPE :
Ensuite, si tu déclares un TOTO de CString :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template <class TYPE> class TOTO { public : explicit TOTO(){}; virtual ~TOTO(){}; void Set (TYPE t){m_obj = t;}; TYPE Get (){return m_obj}; private : TYPE m_obj; };
C'est très moyen car lors du Set (), le prog sera obligé de faire appel au constructeur de recopie car nous n'avons pas de référence à machaine.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6TOTO<CString> montotodestring; CString machaine = TEXT("coin"); montotodestring.Set (machaine); CString val; val = montotodestring.Get ();
Alors, on aurait pu faire la classe TOTO comme cela :
On travaillerait avec des références d'objet, ce qui est quand-même beaucoup plus optimal et moins dévoreur d'espace mémoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template <class TYPE> class TOTO { public : explicit TOTO(){}; virtual ~TOTO(){}; void Set (TYPE& t){m_obj = t;}; TYPE& Get (){return m_obj}; private : TYPE m_obj; };
Par contre, si tu souhaites ensuite travailler avec un TOTO<int>, renvoyer une référence d'un int (ou bool, ou long ou ...), ça fait un peu lourd et là on a donc l'effet inverse : travailler avec des références de littéraux est beaucoup plus couteux que de travailler avec des littéraux eux-même.
On trouve donc en général dans les templatele ARG_TYPE qui permet de spécifier à celui qui l'utilise q'il veut travailler avec des références, des références constantes ou avec le type lui-même.
Si on revient dans l'exemple du CList, mieux vaut faire un CList<CString, CString&> ; par contre, mieux vaut avoir un CList<bool, bool>
Partager