Rappels
Introduite par la version 3, la notion de patron de fonctions permet de définir ce qu’on
nomme souvent des « fonctions génériques ». Plus précisément, à l’aide d’une unique
définition comportant des « paramètres de type », on décrit toute une famille de
fonctions ; le compilateur « fabrique » (on dit aussi « instancie ») la ou les fonctions
nécessaires à la demande (on nomme souvent ces instances « fonctions patron »).
La version 3 limitait les paramètres d’un patron de fonctions à des paramètres de type.
La norme ANSI a, en outre, introduit les « paramètres expression ».
Définition d’un patron de fonctions
On précise les paramètres (muets) de type, en faisant précéder chacun du mot
(relativement arbitraire) class sous la forme template. La
définition de la fonction est classique, hormis le fait que les paramètres muets de type
peuvent être employés n’importe où un type effectif est permis.
Par exemple :
template void fct (T a, T * b, U c)
{
T x ; // variable locale x de type T
U * adr ; // variable locale adr de type U *
...
adr = new T [10] ; // allocation tableau de 10 éléments de type T
...
n = sizeof (T) ; // une instruction utilisant le type T
...
}
Une instruction telle que (T désignant un type quelconque) :
T x (3) ;
est légale même si T n'est pas un type classe ; dans ce dernier cas, elle est simplement
équivalente à :
T x = 3 ;
Instanciation d’une fonction patron
301
Introduite par la version 3, la notion de patron de fonctions permet de définir ce qu’on
nomme souvent des « fonctions génériques ». Plus précisément, à l’aide d’une unique
définition comportant des « paramètres de type », on décrit toute une famille de
fonctions ; le compilateur « fabrique » (on dit aussi « instancie ») la ou les fonctions
nécessaires à la demande (on nomme souvent ces instances « fonctions patron »).
La version 3 limitait les paramètres d’un patron de fonctions à des paramètres de type.
La norme ANSI a, en outre, introduit les « paramètres expression ».
Définition d’un patron de fonctions
On précise les paramètres (muets) de type, en faisant précéder chacun du mot
(relativement arbitraire) class sous la forme template
définition de la fonction est classique, hormis le fait que les paramètres muets de type
peuvent être employés n’importe où un type effectif est permis.
Par exemple :
template
{
T x ; // variable locale x de type T
U * adr ; // variable locale adr de type U *
...
adr = new T [10] ; // allocation tableau de 10 éléments de type T
...
n = sizeof (T) ; // une instruction utilisant le type T
...
}
Une instruction telle que (T désignant un type quelconque) :
T x (3) ;
est légale même si T n'est pas un type classe ; dans ce dernier cas, elle est simplement
équivalente à :
T x = 3 ;
Instanciation d’une fonction patron
301
