Template C++ par l'exemple ( ) |
Ecrit le 18-07-2007 (5340 hits) ... section C++ Template C++ par l'exemple
Le programme principal (main) utiliserait ces classes comme ci-dessous: {mostip} IntStack ii; StringStack ss; ii.push(25); ss.push("Hello"); {/mostip} Si on note que la seule différence entre ces classes (outre le nom de la classe) est le type des données qui sont mises dans la pile. C++ permet de définir une classe en fonction d'un type de générique, c'est à dire paramétrable, ce qui permet de représenter une pile de n'importe quel type possible (y compris défini par l'utilisateur ). La déclaration ressemblerait à ceci :
Le T représente le type générique de la pile, à préciser à l'utilisation entre des symboles "". On voit que le code de la class diffère peu, elle dépend maintenant d'un type T indéfini. Le programme principal déclarerait et utiliserait les piles comme suit : {mostip} Stack<int> ii; Stack<string> ss; ii.push(25); ss.push("Hello"); {/mostip} Il n'y a jamais de fichier d'implémentation (*.cpp) pour une classe de template (on dit aussi "patron de classe"). Toutes les méthodes membres doivent être déclarées dans le fichier d'en-tête (*.h).
Conclusion Les templates sont très pratiques, j'en parle car on les rencontre souvent, par exemple quand on utilise Corba. Solutions alternatives:
De mon point de vue, c'est une facilité qui peut malheureusement amener un mauvais design d'application, dans le cas où il remplace un vrai polymorphisme associé à de l'héritage multiple. On ne devrait les utiliser que dans le cas de classes utilitaires pour lesquelles la performance maximale est requise. |