Rappels
Introduite par la version 3, la notion de patron de classes permet de définir ce que l’on
nomme aussi des « classes génériques ». Plus précisément, à l’aide d’une seule
définition comportant des paramètres de type et des paramètres expression, on décrit
toute une famille de classes ; le compilateur fabrique (instancie) la ou les classes
nécessaires à la demande (on nomme souvent ces instances des « classes patron »).
Cette fois, les paramètres expression étaient déjà prévus par la version 3 alors que,
dans le cas des patrons de fonctions, ils n'ont été introduits que par la norme ANSI.
Définition d'un patron de classes
On précise les paramètres de type en les faisant précéder du mot clé class et les
paramètres expression en mentionnant leur type dans une liste de paramètres introduite
par le mot template (comme pour les patrons de fonctions, avec cette différence qu’ici,
tous les paramètres – type ou expression – apparaissent).
Par exemple :
template class gene
{ // ici, T désigne un type quelconque, n une valeur entière quelconque
} ;
Si une fonction membre est définie (ce qui est le cas usuel) à l’extérieur de la définition
du patron, il faut rappeler au compilateur la liste de paramètres (template) et préfixer
l’en-tête de la fonction membre du nom du patron accompagné de ses paramètres. (En
toute rigueur, il s’agit d’une redondance constatée, mais non justifiée, par le fondateur
du langage lui-même, Stroustrup.) Par exemple, pour un constructeur de notre patron de
classes précédent :
template gene ::gene (...)
{ ..... }
Instanciation d’une classe patron
On déclare une classe patron en fournissant à la suite du nom de patron un nombre de
paramètres effectifs (noms de types ou expressions) correspondant aux paramètres
311
Introduite par la version 3, la notion de patron de classes permet de définir ce que l’on
nomme aussi des « classes génériques ». Plus précisément, à l’aide d’une seule
définition comportant des paramètres de type et des paramètres expression, on décrit
toute une famille de classes ; le compilateur fabrique (instancie) la ou les classes
nécessaires à la demande (on nomme souvent ces instances des « classes patron »).
Cette fois, les paramètres expression étaient déjà prévus par la version 3 alors que,
dans le cas des patrons de fonctions, ils n'ont été introduits que par la norme ANSI.
Définition d'un patron de classes
On précise les paramètres de type en les faisant précéder du mot clé class et les
paramètres expression en mentionnant leur type dans une liste de paramètres introduite
par le mot template (comme pour les patrons de fonctions, avec cette différence qu’ici,
tous les paramètres – type ou expression – apparaissent).
Par exemple :
template
{ // ici, T désigne un type quelconque, n une valeur entière quelconque
} ;
Si une fonction membre est définie (ce qui est le cas usuel) à l’extérieur de la définition
du patron, il faut rappeler au compilateur la liste de paramètres (template) et préfixer
l’en-tête de la fonction membre du nom du patron accompagné de ses paramètres. (En
toute rigueur, il s’agit d’une redondance constatée, mais non justifiée, par le fondateur
du langage lui-même, Stroustrup.) Par exemple, pour un constructeur de notre patron de
classes précédent :
template
{ ..... }
Instanciation d’une classe patron
On déclare une classe patron en fournissant à la suite du nom de patron un nombre de
paramètres effectifs (noms de types ou expressions) correspondant aux paramètres
311
