next up previous
Next: Gestion par le compilateur Up: Les templates Previous: Les templates

Templater une fonction

Considérons la fonction suivante qui retourne la carré d'un entier passé comme argument:

int carre(int x){
  int c = x * x;
  return c;
}

Nous voudrions disposer de cette fonction non seulement pour les variables de type int, mais aussi pour celles de type double, float, etc. Pour tous ces types différents, la définition de la fonction resterait la même, à ceci près que chaque occurence du mot int serait remplacé par double, float, etc.

Il est possible de ne pas préciser dans une fonction le type d'un ou plusieurs arguments mais de leur donner un nom générique pour les identifier et les utiliser dans le corps de la fonction. A ce moment, lorsque la fonction sera appelée, ce nom générique sera remplacé par le type adéquat. Pour cela il faut remplacer la fonction précédente par:

template <class T>
T carre(T x){
  T c = x * x;
  return c;
}

Ici, on a choisi T pour désigner un type quelconque. La fonction carre prend maintenant un objet x d'un type quelconque, et renvoie un objet de même type. Entre temps, une variable c a été déclarée avec ce même type.

Il est également possible de passer plusieurs types en template. Par exemple:

template <class T, class U>
void f(int a, T b, U c, double d){ 
  ...
}


next up previous
Next: Gestion par le compilateur Up: Les templates Previous: Les templates
Guillaume Charpiat 2006-12-07