Tu dis que les templates ont des utilités par moment, et bien soit. Mais je t'avouerai que je n'ai pas encore vraiment vu où.
Tu parles des vectors en C++, qu'il faut utiliser les templates et par le polymorphisme car il implique le fait de dériver d'un objet commun et que ça ralentit l'exécution.
Je pense que les C++iens pensent ainsi car ils n'ont que les tableaux dynamiques et les vectors pour pouvoir entreposer des objets et n'ont pas des objets de type TList avec tous ses avantages.
Tu dis que ce n'est pas bien de devoir dériver d'une même classe de base, hors tu es d'accord avec moi qu'il n'est pas logique de mettre à la fois des carottes et des moutons dans un même vector.
Soit on fait un vector de carottes, soit un vector de legumes, mais si on a besoin d'un vector de legumes, il est clair que tu aurras une classe de base legume dont les classes carottes et poivreaux dériveront.
Si tu as besoin d'un vector avec des objets dérivant de openGLObject et bien dans ce cas, fait une liste de openGLObject.
En C++ le "castage" à chaud coûte de ressources, mais pas en Delphi, c'est courament utilisé, en C# aussi ça existe et il simple de l'utiliser.
Dans les langages plus récents que le C++ comme le Delphi, C# et Java, tous les objets dérivent d'une classe unique commune, ce n'est pas hazard, c'est que c'est fort utile et puissant. Les purs C++iens ne veulent pas reconnaître les limitations de leur langage qui est vieux, a fait des erreurs de jeunesse et manque de nouvelles notions utiles.
Et bien tant pis, chacun garde son avis.
C'est comme pour la surcharge des opérateurs +, -, ++, ..., quand j'ai appris en C++, je me suis dit "Wouah, trop fort, c'est excellent, ça doit être trop utile". Au résultat, c'est une fausse bonne idée, je n'en ai jamais eu l'utilité quand je faisais du C++, ni aucun manque en Delphi et maintenant que je fais du C# aussi, je ne vois pas d'application utile de la surcharge des opérateurs.
screetch dit : [apparté]
au niveau de la manipulation pointeur/manipulation par copie, ce que je dis c'est que manipuler un pointeur force le programmeur a allouer de la mémoire pour l'objet alors que travailler par copie coute la copie (une operation qui peut etre complexe mais bien souvent est simple comme de la copie d'octets) et on a pas besoin d'allouer la mémoire pour l'objet, le container s'en est chargé. La copie coute certes plus cher que manipuler les pointeurs mais coute toujours moins cher qu'effectuer un/plusieurs malloc :)
Les langages créés après le C++ ont abandonné cette notion de faire des objets statiques. Ce n'est pas par hazard, je trouve ça inutile.
Un objet n'est pas un autre type classique comme les int, les float.
Les constructeurs par recopie ne sont pas utiles. Un objet est un objet (oui Lapalice fait partie de ma famille), quand on a une instance, on n'a pas à faire d'autres instances comme ça.
Passer une copie d'un objet en paramètre n'a pas de sens, autant passer une référence de l'objet et s'il ne doit pas être modifié rajouter la déclaration const.
On a plus souvent besoin de connaître l'instance que ses attributs (j'ai peur de ne pas être clair).
Que le C++ existe, c'est bien, il a permis à d'autres langages d'être mieux pensés en retirant les concepts inutiles, mais il a besoin d'une bonne mise à jour, de perdre sa compatibilité avec le C qu'il traine comme un boulet et des concepts inutiles pour ne s'arrêter que sur ce qui est vraiment demandé par les programmeurs.
__________________________
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].
je viens de te l'expliquer plus haut et il faut que tu y mettes de la bonne volonté quand meme :-/
si tu REFUSES de voir l'utilité d'un template ne poste pas ici
on recommence donc :
dans ta TList on bazarde tout et n'importe quoi, des TCarrottes, des TMoutons.
dans mon std::vector<TCarrotte> on ne pourra jamais mettre de TMoutons, ca petera a la compilation.
Comment cela peut il etre considéré comme un avantage de la programation OOP contre les generiques???????????????
ne vient pas me dire que le castage ne coute presque rien, pusque moi je n'ai rien a faire, ca me coute pas presque rien mais ZERO.
screetch dit : je viens de te l'expliquer plus haut et il faut que tu y mettes de la bonne volonté quand meme :-/
si tu REFUSES de voir l'utilité d'un template ne poste pas ici
on recommence donc :
dans ta TList on bazarde tout et n'importe quoi, des TCarrottes, des TMoutons.
dans mon std::vector<TCarrotte> on ne pourra jamais mettre de TMoutons, ca petera a la compilation.
Comment cela peut il etre considéré comme un avantage de la programation OOP contre les generiques???????????????
...
tes arguments ne tiennent pas debout :-/
C'est un véritable dialogue de sourds, je veux bien faire des efforts mais tu comprends ce que je dis à l'envers.
__________________________
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].
Tout simplement parce que la TList n'est qu'une classe de base qu'il est bon de dériver.
Tu peux très surcharger les méthodes d'ajout d'objet afin de ne prendre que le type que tu souhaites.
Au sujet des nanosecondes dans les boucles for. L'important est de bien connaître le langage qu'on utilise et ne pas utiliser les méthodes lentes et qui prennent beaucoup de ressources. Dans mon code, je connais les parties critiques qu'il faut optimiser et je n'utilise pas de surcharge de fonctions.
La question des nanosecondes n'est pas pour moi très important, je préfère parler de la robustesse d'un langage et des applications faites avec.
Si je devais choisir un langage qui me plait dans son principe, je me dirigerais plus vers des langages fonctionnels comme Ocaml ou F# plutôt que vers le C++.
__________________________
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].
je ne suis toujours pas d'accord avec toi, tu compares quelque chose que tu n'as pas besoin de faire (C++ = typage FORT dans les vectors, impossible d'y mettre autre chose) contre quelque chose qu'il est FACILE de faire. meme si la facilité est relative, comment peut on dire que quelque chose de facile a faire l'emporte sur quelque chose qu'on a pas besoin de faire ?
comme je le disais plus haut tout ceci vient de quelqu un qui ne comprend pas les templates et n'a jamais utilisé les facilités de génération de code automatique du C++, car sinon tu comprendrais combien Delphi est pourri sur ce plan la (et tu me cites les deux pires exemples au monde, la Tlist et pas besoin de constructeur de copie)
Puisque je vois que tu es un "Je veux toujours avoir le dernier mot" et que j'en ai marre de débattre dans le vide, je clot ce dialogue de sourds (en tout cas pour ma part) par : "tu as raison".
__________________________
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].
N'empêche que moi aussi j'attend toujours un exemple de fou qui va me convertir complètement aux templates... Du code vaut mieux que des explications. Une comparaison entre un code template et code POO d'un même bout de programme... et bien sûr que cela soit utile concrètement...
__________________________
Sujet résolu ? Pensez à mettre le tag
Un problème en C# ? Vérifiez celui-ci n'est pas déjà résolu dans la FAQ et que le sujet n'est pas traité parmis les tutoriaux ou les articles avant de poster dans le forum C#.
l'important n'est pas de convertir complètement aux templates mais de voir dans quels cas les templates sont plus adequat que la POO pour resoudre un probleme. Malheureusement si vous ne voyez pas ce que je veux dire pour le coup des containers alors il y a peu a faire, je ne fournis pas des exemples a la demande et ca me parait etre le plus probant.