Templates ... mais qu'est ce que c'est donc que ça ?

Templates ... mais qu'est ce que c'est donc que ça ? - Programmation

Marsh Posté le 13-07-2001 à 11:55:54    

J'en ai marre d'entendre toujours parler de Templates et de pas savoir ce que c !
c vrai quoi, ça à l'aire d'être à la mode... j'vais finir par paraitre ringuard si j'm'y met pas :D.
 
Je commence à me démerder en C++, mais les templates me sont complètement étrangères...
c très utilisé en fait ?
c quoi ? qqn pourrais m'expliquer ?
c essentiel (ou pratique) comment truc ? parce que j'écrit mes progs sans ça...avec l'api et les mfc de tps en tps, tout vas bien !

 

[edtdd]--Message édité par El_gringo--[/edtdd]

Reply

Marsh Posté le 13-07-2001 à 11:55:54   

Reply

Marsh Posté le 13-07-2001 à 13:55:25    

bah !? personne connais ça ou quoi !?

Reply

Marsh Posté le 13-07-2001 à 13:57:38    

Moi aussi ça m'intéresse les explications.
:)

Reply

Marsh Posté le 13-07-2001 à 14:01:04    

un template est une classe générique.
 
par exemple, tu définis une classe template Queue< type_t t>
et des méthodes pour cette classe.
 
Ensuite, tu peux instancier des objets de type Queue<int>, Queue<float> etc... pour peu que les types en question disposent des operateurs appelés dans les fonctions de la classe Queue.
 
par ex, quand tu defini la méthode Somme de cette classe, tu va retourner une valeur arg1+arg2. Ce qui veut dire que arg1 et arg2 doivent être d'un type qui défini l'operateur +.
 
Menfin c long a expliquer.
Le plus bel exemple de template: regarde dans la STL (Standard Template Library).

Reply

Marsh Posté le 13-07-2001 à 14:01:17    

en plus tu les utilises sans le savoir j'crois.
Je voudrais pas dire des conneries, mais y me semble que string c lié aux templates
A propos, tu ferai mieux d'utiliser les CString, c tout simple à gérer !

Reply

Marsh Posté le 13-07-2001 à 14:04:36    

ce sont des classes ou des fonctions generiques...
imagine que tu puisse definir une fonction ou une classe avec un type variable :
 
template <class T>
T& max(T &a, T &b)
{
   return a>b ? a : b
}
 
ici class est purement formel, il indique que T est un type.
T va etre substitue par le type effectif definit lors de l'appel
Cette fonction marche pour tout les types qui definissent les operateurs > et =, attention s'il n'ont pas leur signification habituels pour une de tes classes...
 
Fin de la lecon 1.
 
Grillee ;)

 

[edtdd]--Message édité par BENB--[/edtdd]

Reply

Marsh Posté le 13-07-2001 à 14:29:20    

mais du coup dans ces trucs là on peux faire que des choses assez simples, seulement avec des opérateurs puisque c la seule choses qui ne dépend pas du type des données...
c relativement rare en fait, non !?

Reply

Marsh Posté le 13-07-2001 à 14:43:33    

El_gringo a écrit a écrit :

mais du coup dans ces trucs là on peux faire que des choses assez simples, seulement avec des opérateurs puisque c la seule choses qui ne dépend pas du type des données...
c relativement rare en fait, non !?  




Non tu peu faire :
 
template<class T>
void titi(T &a)
{
   a.foo();
}
 
mais si tu appel cette fct sur une classe qui n'a pas de methode foo... tu aurra une erreur...
 
en fait les templates doivent etre dans des .h, et ils sont instancies soit explicitement soit quand le compilo trouve un appel, il instancie la bonne fct.
 
Lors de l'instanciation il "compile" en fait la fonction avec le type utilise...
 
Les templates peuvent etre des alternatives aux heritages, et en plus il n'y a pas de degradation de perf normalement...
 
je m'explique si deux classes ont une methode foo elles peuvent etre appliques a la methode titi ci dessus, sinon il aurrait fallu deux methodes identiques , ou que ces deux classes derivent d'un classe commune definissant la methode foo.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed