Surcharge de l'Opérateur Virgule - C++ - Programmation
Marsh Posté le 27-04-2004 à 20:36:12
bien vu. mais bon ça reste du bricolage par rapport au futur du C++. attention à ne surcharger , que dans ce genre de cas précis, sinon, c'est une super arme d'ofuscation de code.
j'aurais peut être ajouter un contrôle de capacité quand même
Marsh Posté le 27-04-2004 à 20:38:02
Taz : oui je sais bien, mais bon, on a le temps pour le nouveau C++ ??
Marsh Posté le 27-04-2004 à 20:41:35
joel f a écrit : Taz : oui je sais bien, mais bon, on a le temps pour le nouveau C++ ?? |
oh je crois qu'on est plus très loin là
Marsh Posté le 27-04-2004 à 21:18:49
Code :
|
du premier coup sans erreur de compilation !
bon évidemment je sais que c'est peut être perfectible, mais bon, pas question d'avoir d'initialisation sans template
edit1: operator= manque un +1
edit2: operator= Comma<0> plutot que de le faire à la main
edit3: Comma manque un petit const
Marsh Posté le 27-04-2004 à 21:25:47
Citation : Même si l'interet |
Non non.
On sent l'influence du Lisp, là...
Marsh Posté le 27-04-2004 à 21:38:08
ReplyMarsh Posté le 27-04-2004 à 21:46:59
'tain la vache, j'avais pas fait gaffe, si on vire toute la partie affichage, mon g++ dégage tout ce qui sert à rien, c'est à dire tout est considéré comme NOOP, résultat, le programme, il fait rien. superbe méthode pour écrire un int main(){ } en somme
Marsh Posté le 27-04-2004 à 21:47:16
el muchacho a écrit : Euh, que ceux-tu dire ? |
rien rien ^^ jsuet que c'est l'époque des TP/TD pas des programming tips
Marsh Posté le 27-04-2004 à 22:05:59
joli
joel f a écrit : Même si l'interet |
je suis toujours aussi interressé
(d'ailleurs je voudrais bien un petit qqchose sur la construction de stream si qq1 avait le temps )
Marsh Posté le 27-04-2004 à 22:09:40
Citation : rien rien ^^ jsuet que c'est l'époque des TP/TD pas des programming tips |
C'est à dire que de mon coté, je suis déjà occupé avec mon petit problème d'algo que j'ai posé (qui n'attire pas non plus les suffrages d'ailleurs); ca doit être un peu trop facile pour Taz et toi, je suppose.
ps : au fait, extceptionnel, le lien que tu as donné.
Marsh Posté le 28-04-2004 à 02:15:06
biensur, comme nos deux versions utilisent des foward iterator, le concept est généralisable à n'importe quelle séquence. on peut même faire quelque chose de générique. cela dit, la version template n'est elle possible que sur des séquences à taille statique, la vérification des arguments aussi
Marsh Posté le 27-04-2004 à 20:30:56
Introduction :
Ce topic reprend un peu l'esprit des quelques topics postés cet été
sur la programmation template et autre technique de sioux. Même si l'interet
pour ces posts semblent avoir faibli, j'ai décidé d'un commun accord avec moi
même d'en rajouter quelques uns
Ce topic a pour vocation de montrer l'utilisation saugrenue de la surcharge de l'opérateur virgule.
Mise en Oeuvre :
Tout d'abord
Oui, j'ai bien parler de l'operateur virgule (operator,() pour les intimes).
Celui la même que bon nombre d'entre vous n'ont jamais, Ô grand jamais, penser à surcharger.
Et bien, tant pis, on va le faire quand même.
L'interet ??? Considerons une classe ressemblant à std::vector<double> :
Je ne m'attarde pas sur les détails, vous etes tous capable de faire ça hein
Maintenant, on aimerais bien écrire des trucs style :
Pour initialiser le tableau Comment faire ???
Il faut regarder de plus prés cette expression :
a = 1,2,3,4,5,6,7,8,9,10;
Elle est equivalente à :
(((((((((a = 1),2),3),4),5),6),7),8),9),10;
Une fois cette précision faite, on peut concevoir que l'expression :
(a = 1)
va renvoyer une instance d'une classe temporaire - appelons la CommaInit -
qui se verra fournir une surcharge de la virgule :
Ok, d'accord, ensuite ???
Et bien, surchargons l'operateur = de TableauDouble :
Et voila
Une version plus sécurisée, peut testé iter pour vérifier que l'on ne puisse ecrire :
Exercice :
1) Adaptez ce code pour supporter une syntaxe indépendante du type.
A savoir permettre l'initialisation en ligne de tableau de char, de float de
complex<double> , etc ...
2) Adapter le au conteneur bidimensionel.
3) Comment différencier :
et
Quelques Liens :
http://osl.iu.edu/~tveldhui/papers/techniques/