Une classe peut aussi être templatée. Par exemple, si l'on souhaite que
l'un des champs ait un type générique T
plutôt qu'un type précis:
template <class T> class Vecteur { int n; T* tableau; public: Vecteur(const Vecteur<T>& A){} // etc. };
Les différentes classes correspondantes s'appellent Vecteur<int>
(pour T = int
),
Vecteur<double>
, Vecteur<bool>
, etc. Attention,
Vecteur
lui-même n'est pas le nom d'une classe. Cette syntaxe
explique que le constructeur par copie indiqué dans l'exemple précédent
prend comme argument un const Vecteur<T>&
.
Ainsi pour déclarer (avec le constructeur vide) un objet A
de type Vecteur<T>
pour T = int
on fait simplement:
Vecteur<int> A;