# Programmation C++/Les templates

* Avant-propos
* Introduction
* Compilation
* Un premier programme
* Les commentaires
* Le préprocesseur
* Les types de base et les déclarations
** Exercices
* Les opérations de base
* Les entrées-sorties
* Les pointeurs
** Exercices
* Les références
* Les tableaux
** Exercices
** Exercices sur les tableaux statiques
** Exercice : Tris des tableaux à une dimension
** Solution : Tris des tableaux à une dimension
* Les structures de contrôle
** Exercices
** Exercices if...else et switch
* Les fonctions
** Exercices
* Les structures
** Exercices
* Les classes
** Exercices
** Exercices de développement
* Les espaces de noms
* Les exceptions
* Les templates
** Exercices
* Conventions d'appel
* Les fichiers
* La librairie standard
* Expressions rationnelles
* Interfaces graphiques
* Bibliographie et liens

## Anciennes pages

* Opérateurs
* Héritage
* Polymorphisme
* Avant-propos
* Introduction
* Compilation
* Un premier programme
* Les commentaires
* Le préprocesseur
* Les types de base et les déclarations
** Exercices
* Les opérations de base
* Les entrées-sorties
* Les pointeurs
** Exercices
* Les références
* Les tableaux
** Exercices
** Exercices sur les tableaux statiques
** Exercice : Tris des tableaux à une dimension
** Solution : Tris des tableaux à une dimension
* Les structures de contrôle
** Exercices
** Exercices if...else et switch
* Les fonctions
** Exercices
* Les structures
** Exercices
* Les classes
** Exercices
** Exercices de développement
* Les espaces de noms
* Les exceptions
* Les templates
** Exercices
* Conventions d'appel
* Les fichiers
* La librairie standard
* Expressions rationnelles
* Interfaces graphiques
* Bibliographie et liens

## Anciennes pages

* Opérateurs
* Héritage
* Polymorphisme
[ Modifier le sommaire ]

## Définitions des templates

Un template est un patron définissant un modèle de fonction ou de classe dont certaines parties sont des paramètres (type traité, taille maximale). Le patron de fonction sert à généraliser un même algorithme, une même méthode de traitement, à différents cas ou types de données.
Le mot clé template est suivi de la liste des paramètres du patron entre les signes < et >, suivi de la définition de la fonction ou de la classe.
L'instanciation d'un patron permet la création effective d'une fonction ou d'une classe.

## Patron de fonction

Un patron de fonction est un modèle de fonction précédé du mot clé template et de la liste des paramètres du patron entre les signes < et >.
Exemple avec un patron de fonction calculant la valeur maximale d'un tableau de données (le type étant le paramètre du patron de fonction) :
Le type class utilisé pour le paramètre T est en fait un type de données, pas forcément une classe. La norme a introduit plus tard le mot clé typename qui peut venir se substituer à class dans ce cas-là.
Exemple d'utilisation :
Le compilateur crée une fonction max à partir du type des arguments, en remplaçant le paramètre T par le type int dans le cas précédent. Après remplacement le compilateur génère la fonction suivante :
Si on utilise la fonction max avec différents types (int, double, ...), le compilateur générera autant de fonctions. Les patrons permettent donc d'éviter d'écrire plusieurs fonctions pour chaque type de donnée traité. Quand on sait que la duplication inutile de code est source d'erreur, on comprend l'intérêt de mettre en facteur plusieurs fonctions potentielles dans un même patron de fonction.

## Patron de classe

La déclaration d'un patron de classe utilise une syntaxe similaire.
Exemple d'une classe gérant un tableau de données :
L'implémentation du constructeur et des méthodes de la classe exige une syntaxe un peu plus complexe. Par exemple, pour le constructeur :
La première ligne rappelle qu'il s'agit d'un patron de classe. Le nom du constructeur est précédé du nom de la classe suivi des paramètres du patron de classe, afin que le compilateur détermine de quelle classe il s'agit. Car en pratique, on peut très bien combiner patron de classe et patron de méthode, par exemple.
Les méthodes sont implémentées de manière identique :
Contrairement aux patrons de fonctions, l'instanciation d'un patron de classe exige la présence de la valeur des paramètres à la suite du nom de la classe.
Exemple :
Le compilateur génère une classe pour chaque ensemble de valeurs de paramètres d'instanciation différent.

## Voir aussi

* Exercices