4 votes

Comment expliquer les templates C++ à des développeurs juniors ?

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.

8voto

Paul Butcher Points 5271

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.

4voto

janm Points 9310

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 !

2voto

hrnt Points 5835

À mon avis, il est préférable de les expliquer comme des macros (très) sophistiquées. Elles fonctionnent simplement à un niveau plus élevé que les macros de substitution de texte de style C.

2voto

xtofl Points 22333

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.

2voto

Tristram Gräbener Points 5566

Présentez-les comme des macros avancées. Il s'agit d'un langage de programmation à part entière qui est exécuté pendant la compilation.

Prograide.com

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.

Powered by:

X