C quoi les templates ?

C quoi les templates ? - Programmation

Marsh Posté le 18-09-2001 à 12:15:00    

Quelqu'un peut m'expliquer brievement ce que c'est ?

Reply

Marsh Posté le 18-09-2001 à 12:15:00   

Reply

Marsh Posté le 18-09-2001 à 12:30:02    

voilou le mieux c que par exemeple tu aille voir ce site:
 
 
http://casteyde.christian.free.fr/ [...] c4269.html
 
@+++ bon courage

Reply

Marsh Posté le 18-09-2001 à 12:43:09    

Templates allow you to reuse source code by providing the compiler with a way to substitute type names in
the body of a class or function. This supports the use of container class libraries, which are important tools for the rapid, robust development of object-oriented programs
 
vw


---------------
The best way to accelerate a computer running windows is at 9.8m.s-2
Reply

Marsh Posté le 18-09-2001 à 22:47:59    

Au lieu d'écrire:

Code :
  1. int min(int a, int b) {
  2.     if (a < b) {
  3.         return a;
  4.     }
  5.     else {
  6.         return b;
  7.     }
  8. }
  9. short min(short a, short b) {
  10.     if (a < b) {
  11.         return a;
  12.     }
  13.     else {
  14.         return b;
  15.     }
  16. }
  17. float min(float a, float b) {
  18.     if (a < b) {
  19.         return a;
  20.     }
  21.     else {
  22.         return b;
  23.     }
  24. }
  25. double min(double a, double b) {
  26.     if (a < b) {
  27.         return a;
  28.     }
  29.     else {
  30.         return b;
  31.     }
  32. }
  33. String min(String a, String b) {
  34.     if (a < b) {
  35.         return a;
  36.     }
  37.     else {
  38.         return b;
  39.     }
  40. }


Tu peux écrire :

Code :
  1. template <class T>
  2. T min(T a, T b) {
  3.     if (a < b) {
  4.         return a;
  5.     }
  6.     else {
  7.         return b;
  8.     }
  9. }


Avantage : tu évites de dupliquer ton code n fois (puisque le code n'existe qu'en un seul exemplaire : le code générique), et tu as une fonction qui est potentiellement définie pour tout type T sur lequel (ici), il existe un opérateur "<" (elle ne l'est réellement que quand tu l'"instancie" pour un type donné, c'est-à-dire quand tu l'utilise pour un type donné).
Si tu corriges un bug dans une des fonctions "dupliquées", il est souvent difficile d'être sûr que tu as bien corrigé le même bug dans tous les endroits où cette fonction est dupliquée. Avec un template, il n'y a qu'un seul endroit à corriger, puisque le code est unique.
 
Inconvénient des templates en C++ : Les présupposés sur le type générique ne sont pas explicités, ce qui est parfois gênant (les implicites sont souvent source de bugs). D'autres langages (comme Ada, par exemple) t'obligent à déclarer les présupposés sur ton type générique, ce qui est plus clair. Par ailleurs, C++ utilise aussi l'instanciation implicite des templates : utilisation d'un template instancié vaut déclaration, ce qui est dangereux. D'autres langages (oui, je sais, encore Ada, par exemple) obligent le programmeur à déclarer chaque instanciation ("je vais utiliser tel module ou telle fonction générique, appliqué à tel type" ) avant de pouvoir l'utiliser. Ce que je trouve plus sûr.

 

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

Reply

Marsh Posté le 19-09-2001 à 11:17:25    

Tt à fait d´accord avec BifaceMcLeOD les templates en C manquent cruellement d´une possibilité de pouvoir restreindre les types pouvant être utilisés.. Genre ds l´exemple être sûr de l´existence et du bon comportement de l´opérateur <.. :)


---------------
Athlon64 s754 10*200MHz - R9800Pro - 512MB DDR200MHz - ZX6RR - Q2[SupOp] - Tutorial Video: multilangues, multisstitres
Reply

Marsh Posté le 19-09-2001 à 22:54:57    

En Ada, ça aurait donné :

Code :
  1. generic
  2.     type T is limited private;
  3.     with function "<"(left : T; right : T) returns boolean is <>;
  4. function min(left : T; right : T) returns T is
  5. begin
  6.     if (left < right) then
  7.        return left;
  8.     else
  9.        return right;
  10.     end if;
  11. end min;


 
De mémoire, car ça fait des années et des années que je n'ai pas fait d'Ada !
C'est certes un peu plus verbeux qu'en C++, mais ici, point d'implicite. Tout est écrit, il n'ya rien à deviner.
 
Et pour instancier tout ça :

Code :
  1. function minInt32 is new min(Integer32);
  2. function minString is new min(String, "<" );

 

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

Reply

Sujets relatifs:

Leave a Replay

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