Au cas où j'aurai dit une connerie, je parlai des generics java, je ne connais pas ceux du C#
Donc les template, qui ne sont pourtant qu'une grosse macro, ont le bon gout d'être turing complet, ce qui n'est pas le cas des generics java.
Les generics, à part de ce facilité la vie sur les cast, je n'y ai pas trouvé grande utilité.
Par contre les template ont peut les dériver des types de la template, ou encore instancier ce type au sein de la template, ont peut les spécialisés en fonction du type...
En pratique que peut on faire avec des template qu'on ne peut faire avec les generics: duck typing, développement d'algorithme génériques (type les graphs de boost), modifier le comportement d'un objet sans modifier l'interface de celle ci (typiquement lorsqu'on écrit un garbage collector pour c++, au lieu d'instancier l'objet, on laisse la template le faire et on redefini les opérateurs . et ->, comme les smart pointers de boost).
Je dis pas que c'est sans défaut, ne serait ce que la syntaxe très lourde (perso je n'ai jamais réussi à lire std::string), c'est statique (il faut connaitre la template à la compilation et si on modifie celle-ci, il faut tout recompiler, y compris les modules annexes), de plus pendant longtemps les compilos géraient très mal les templates.
[^] # Re: De l'intérêt de ces paradigmes ?
Posté par Alex . En réponse au journal Des paradigmes alternatifs. Évalué à 4.
Au cas où j'aurai dit une connerie, je parlai des generics java, je ne connais pas ceux du C#
Donc les template, qui ne sont pourtant qu'une grosse macro, ont le bon gout d'être turing complet, ce qui n'est pas le cas des generics java.
Les generics, à part de ce facilité la vie sur les cast, je n'y ai pas trouvé grande utilité.
Par contre les template ont peut les dériver des types de la template, ou encore instancier ce type au sein de la template, ont peut les spécialisés en fonction du type...
En pratique que peut on faire avec des template qu'on ne peut faire avec les generics: duck typing, développement d'algorithme génériques (type les graphs de boost), modifier le comportement d'un objet sans modifier l'interface de celle ci (typiquement lorsqu'on écrit un garbage collector pour c++, au lieu d'instancier l'objet, on laisse la template le faire et on redefini les opérateurs . et ->, comme les smart pointers de boost).
Je dis pas que c'est sans défaut, ne serait ce que la syntaxe très lourde (perso je n'ai jamais réussi à lire std::string), c'est statique (il faut connaitre la template à la compilation et si on modifie celle-ci, il faut tout recompiler, y compris les modules annexes), de plus pendant longtemps les compilos géraient très mal les templates.