Hé bien suite à une discussion avec un membre, nous avons remarqué que nos points de vue divergeaient quand à l'utilité des templates.
Je pense que les templates sont un outil très riche offert par le C++, et m'en servant beaucoup, je les trouve réellement utiles. Ayant pris l'habitude de m'en servir, ça m'allège beaucoup les codes, ça me permet de ne pas avoir à recoder plusieurs fois les mêmes fonctions. Ca me fait également gagner du temps d'exécution.
Je sollicite donc la communauté pour qu'elle donne son avis sur cette question.
je les utilise surtout pour des fonctions récurrentes comme max(float, float), max(int, int) etc ou des conversions toString ou autre
__________________________
Spirit - modérateur casu ^-^'
Je ne vois absolument pas l'utilité des templates, je n'ai pas besoin de recoder 2x le même code et je n'ai jamais utilisé les templates.
Je ne vois pas de cas concret d'utilisation qui me simplifiera la vie.
Donc contre.
PS : et ce tuto, tu ne veux pas le mettre sur MoteurProg ?
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Si tu veux connaître leur utilité, lis donc des docs dessus.
Tu n'as jamais besoin de templates?
Donc toi tu coderais un vector que pour les int, un que pour les char, un que pour les float, etc ... ?
Tu utiliserais à tout va le polymorphisme d'exécution en ralentissant par conséquent tes applis? Car dans certains cas les templates peuvent remplacer.
Les templates permettent de plus d'écrire des outils génériques, que tu n'auras pas à recoder pour chaque projet. Tu auras juste à imposer une certaine contrainte sur tes types génériques, et roule ma poule.
Merci merci, mais pour moi ce n'est pas du tout un manque de ne pas avoir les templates.
Je ne code pas de vectors, je ne trouve pas ça très utile, il y a d'autres objets plus pratiques et puis ils possèdent déjà tout ce dont j'ai besoin.
Le polymorphisme ralentit par conséquent les applis ? Tu as des chiffres ?
Ce n'est pas bien de dénigrer des évolutions de la POO pour vendre les templates.
Peux-tu me dire le temps CPU utilisé pour une méthode utilisant le polymorphisme et la même méthode utilisant les templates ?
Qui te dit que c'est plus rapide avec les templates ?
De plus, je n'ai pas besoin de faire des fonctions génériques. Au contraire, elles sont toujours spécialisées pour ce dont j'ai besoin de faire.
Je n'ai pas besoin d'une méthode générique qui est capable de traiter des carottes et des voitures.
Je n'ai toujours pas d'exemple qui montre les avantages des templates dans un cas concret.
Peut-être trouves-tu ça utile car tu ne penses que templates mais que tu pourrais très bien faire un code plus simple en pensant autrement.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Ah non je pense aussi très orienté objet.
Le polymorphisme d'exécution est plus lent car il nécessite les vtable. les templates n'utilisant pas la hiérarchie(ça marche pas pour tous les cas) de classes, tous les types sont déterminés à la compilation, d'ou le gain de rapidité évident.
Pour des cas concrets, tu n'as qu'à lire n'importe quel cours/tuto/livre sur le sujet.
Comment remplaces tu les vectors? tu recodes chaque fois tes propres tableaux dynamiques? pour chaque type?
__________________________
Be C++ Mon Blog (C++, Intelligence Artificielle, Prolog) Qt 4.5 disponible en version Release Candidate !
Oui c'est vrai que l'exemple de faire une fonction afficher qui affiche n'importe quel type d'objet montre bien l'utilité des templates.
Je n'ai pas besoin de tableaux dynamiques, j'ai des objets liste qui gère une liste d'objets et quand j'ai besoin de faire un tableau de nombre (ce qui est rare), je n'ai pas besoin qu'il soit dynamique.
Et si j'ai besoin d'un tableau d'entiers, je n'ai pas besoin qu'il sache faire de même avec carotte, des strings et des méthodes, j'ai juste besoin qu'il sache travailler avec des entiers.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
Oui mais le fait que le même code de tableau puisse prendre tous ces types, ça t'est utile non?
Je n'ai pas cité mon tuto dans la liste exprès car je ne présente pas vraiment d'exemple très concret.
Quand je parle de tableau, c'est même chose pour listes et autres conteneurs.
A chaque fois tu connais à l'avance le nombre d'élément que ça contiendra ?
Ensuite, les templates servent aussi pour la metaprogrammation, au polymorphisme de compilation, et surtout, vraiment surtout, à créér du code générique, permettant de coder des "librairies" que l'on peut réutiliser à volonté.
Les listes contiennent des objets qui dérivent tous du même ancêtre, donc pas de problème la dessus, de plus elle possèdent déjà toutes les méthodes utiles pour trier, ajouter, retirer un élément.
Je n'ai pas envie de faire de recherche la dessus comme tu me le demandes, je n'en vois pas l'intérêt, je n'ai pas de manque dans mes connaissances.
Je ne ferrai de la recherche dessus que quand je me dirai que ça peut me servir et que j'en ai besoin concrètement mais je sais que je n'en aurai jamais besoin et que ce serrait une perte de temps à faire de la recherche sur le sujet, il y a des choses bien plus utiles.
Ce que je veux, c'est que toi, tu me donnes un exemple concret.
Alp dit : permettant de coder des "librairies" que l'on peut réutiliser à volonté.
C'est du pur commercial, ça fait très joli mais ça ne veut rien dire.
Soit tu fais une bibliothèque pour gérer la base de registre et elle ferra ce qu'on lui demande, soit on fait une bibliothèque qui gère la 3D et elle travaillera avec des objets 3D...
On ne va pas faire une bibliothèque pour la base de registre qui va aussi savoir gérer des objets 3D.
Trouves moi des exemples concrets et à partir de ce moment là, on pourra en parler, mais pour l'instant tu parles dans le vide.
Tu ne veux pas donner d'exemple concret parce que tu n'en as pas et tu demandes qu'on fasse des recherches pour ne pas le reconnaître.
PS : tu parles des langages qui n'ont pas les templates comme s'ils n'étaient pas complets, mais on pourrait très bien parler des manques dans le C++ qui ne permet pas un certain nombre de choses qui sont possibles dans d'autres langages OO, mais c'est un autre débat.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu].
J'ai pas dit que les autres langages _manquaient_ de templates. J'ai dit qu'il y avait des choses qui les compensaient. Par exemple en Delphi et en Java il y a la classe mère de tous les objets.
En reprenant ton exemple d'objets 3D : si un jour tu décides soit de changer ta classe représentant un objet 3d, soit de changer de moteur, bref changement de code, mais que tu ais codé énormément de fonctions les manipulant.
En Delphi ok, tu peux te servir de la classe de base.
En C++, il faudrait alors dans chacun de ces cas créér une classe de base pour des objets n'ayant pas forcément tant de choses que ça en commun. Et en plus les vtable allourdiront l'exécution. Alors qu'avec les templates par exemple, il suffit d'imposer à ton type d'avoir telle ou telle fonction ou tel ou tel typedef, etc... pour que le type soit utilisable, sans forcément savoir quel type sera transmis au moment où tu codes ta fonction.