On pourrait scinder la question en deux : comment lire et à écrire code modèle.
Il est très facile de dire : "si vous voulez un tableau de doubles, écrivez std::vector<double>
", mais cela ne leur apprendra pas comment les modèles fonctionnent.
On pourrait scinder la question en deux : comment lire et à écrire code modèle.
Il est très facile de dire : "si vous voulez un tableau de doubles, écrivez std::vector<double>
", mais cela ne leur apprendra pas comment les modèles fonctionnent.
J'essaierais probablement de démontrer la puissance des modèles en montrant l'inconvénient de ne pas les utiliser.
Une bonne démonstration consisterait à écrire quelque chose de simple comme une pile de doubles (écrite à la main, pas en STL), avec les méthodes push, pop et foldTopTwo, qui extrait et additionne les deux valeurs supérieures de la pile, puis repousse la nouvelle valeur.
Dites-leur ensuite de faire la même chose pour les ints (ou n'importe quel autre type numérique).
Puis montrez-leur comment, en écrivant cette pile comme un modèle, vous pouvez réduire de manière significative le nombre de lignes de code, et toute cette horrible duplication.
Il y a un dicton : "Si tu ne peux pas l'expliquer, tu ne le comprends pas."
Vous pouvez le décomposer davantage : Comment écrire du code qui utilise du code modèle, et comment écrire du code qui fournit un service modèle aux autres.
L'explication de base est que les modèles génèrent du code basé sur un modèle. C'est la source du terme "méta-programmation". Il s'agit de la programmation de la façon dont la programmation devrait être faite.
La complexité essentielle d'un vecteur n'est pas qu'il soit un vecteur de doubles (ou de type T), mais qu'il soit un vecteur. La structure de base est la même et les modèles séparent ce qui est cohérent de ce qui ne l'est pas.
La suite de l'explication dépend du sens que vous donnez à tout cela !
J'ai trouvé très instructif d'examiner les langages typés canard. Là-bas, le type d'argument que vous donnez à une fonction n'a pas d'importance, du moment qu'elle offre la bonne interface.
Les modèles permettent de faire la même chose : vous pouvez prendre n'importe quel type, pour autant que l'interface adéquate soit présente. L'avantage supplémentaire par rapport au typage en canard est que l'interface est vérifiée à la compilation.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.