je veux qu'un op binaire soit evalué de droite a gauche (comment ?)

je veux qu'un op binaire soit evalué de droite a gauche (comment ?) - C++ - Programmation

Marsh Posté le 27-01-2003 à 19:21:41    

Code :
  1. l<<new entier(55)<<new entier(666);
  2. new entier(95887)>>(new entier(765)>>l);


 
voilà j veux faire ceci la premiere ligne ajoute des entier en fin de liste l et la seconde ajoute au debut.
Sauf que vous voyez bien que j'ai du rajouter des parentheses car sinon il veut po et croit que je veux enfiler deux entier* .
Je sais qu'en prolog on peut changer le sens d'evaluation, mais en c++ je sais pas.
Je voudrais que ça evalue de la droite vers la gauche.
 

Code :
  1. l>>new entier(95887)>>new entier(765);


 
Sinon faudrait que je fasse ça mais c tout nul et en plus ça enfile pas les elements dans le bon ordre.  :sweat:  
 
Une idée me vient à l'instant ça serait la recursivité , mais je vois pas trop  :heink:

Reply

Marsh Posté le 27-01-2003 à 19:21:41   

Reply

Marsh Posté le 27-01-2003 à 19:28:52    

une autre solution que je vois serait de re-surcharger le membre de gauche de >> de tel façon a ce qu'il prenne en parametre une fonction (type*,  ... hem ...  :pt1cable:  
benh ça risque de pas etre posssible comme ça en fait [:ddr555]

Reply

Marsh Posté le 27-01-2003 à 19:30:35    

Je pense pas que tu puisse changer ça. Les priorité des opérateurs et leur sens d'évaluation me semble plutôt immuable. Enfin je peux me tromper.


---------------
Le Tyran
Reply

Marsh Posté le 27-01-2003 à 19:35:54    

je tient a preciser que je surcharge << et >> avec deux membre, et que ce n'est donc pas une methode membre d'un objet.
J'ai lu aussi que pour l'operateur++ afin de le mettre en post fixé i++ par exemple, il faut faire ceci : operator++(int)
au lieu de operator++() tout cours pour le prefixé.
Peut etre est ce une voie a explorer.

Reply

Marsh Posté le 27-01-2003 à 19:40:23    

LetoII a écrit :

Je pense pas que tu puisse changer ça. Les priorité des opérateurs et leur sens d'évaluation me semble plutôt immuable. Enfin je peux me tromper.


 
en affet l'associativité des opérateurs ainsi que leur priorité est immuable dans le c++ :
 
http://www-agrw.informatik.uni-kl. [...] dence.html


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 27-01-2003 à 19:41:37    

nan, les opérateur de post/pré incrémentation/décrémenttion sont un cas à part. En ce qui concerne ton pb j'ai jamais rien vu qui permete de changer les sens d'évaluation ou les priorité d'opérateurs. Ce qui ne veut pas dire que ça n'existe pas.
 
Ce serait bien que tu passe les proto de tes opérateurs.


---------------
Le Tyran
Reply

Marsh Posté le 27-01-2003 à 19:49:14    

Arg ! Deja, vouloir donner aux opérateurs un sens qu'ils n'ont pas c'est mal. Changer leur priorité ou leur sens d'évalutation !!!
 
Z'ètes fous, vous trouvez pas que le C++ est déjà assez lent à compiler et assez compliqué comme ça ?

Reply

Marsh Posté le 27-01-2003 à 20:00:28    

Code :
  1. template<class T> Plist<T>& operator>>(T* Pobj,Plist<T>& l)
  2. {
  3.   l.add(Pobj);
  4.   return l;
  5. };
  6. template<class T> Plist<T>& operator<<(Plist<T>& l,T* Pobj)
  7. {
  8.   l.adde(Pobj);
  9.   return l;
  10. };

Reply

Marsh Posté le 27-01-2003 à 20:02:33    

Kristoph a écrit :

Arg ! Deja, vouloir donner aux opérateurs un sens qu'ils n'ont pas c'est mal. Changer leur priorité ou leur sens d'évalutation !!!
 
Z'ètes fous, vous trouvez pas que le C++ est déjà assez lent à compiler et assez compliqué comme ça ?


 
Perso c juste pour ma culture perso. Ca me viendrait pas à l'idée de modifier ça dans un prog.


---------------
Le Tyran
Reply

Marsh Posté le 27-01-2003 à 20:05:04    

je viens de penser que je pourrais munir les objets a inserer de la methode  Plist<T>& operator>>(Plist<T> &l), mais il faudrait dans ce cas que je face ceci:
 

Code :
  1. Plist<T>& operator>>(Plist<T> &l)
  2. {
  3.    l.add(this->clone());
  4.    return l;
  5. };
  6. //et la pouvoir faire
  7. entier(666)>>entier(554)>>l;


 
[:ddr555]
 
 :pt1cable:

Reply

Marsh Posté le 27-01-2003 à 20:05:04   

Reply

Marsh Posté le 27-01-2003 à 20:10:29    

Kristoph a écrit :

Arg ! Deja, vouloir donner aux opérateurs un sens qu'ils n'ont pas c'est mal. Changer leur priorité ou leur sens d'évalutation !!!
 
Z'ètes fous, vous trouvez pas que le C++ est déjà assez lent à compiler et assez compliqué comme ça ?


 
Nan m'en fou.
C'est une grosse lacune du c++ de pas pouvoir definir des operateurs existant pas. ( c moi qui le dit :D )

Reply

Marsh Posté le 27-01-2003 à 20:10:49    

karim63 a écrit :

je viens de penser que je pourrais munir les objets a inserer de la methode  Plist<T>& operator>>(Plist<T> &l), mais il faudrait dans ce cas que je face ceci:
 

Code :
  1. Plist<T>& operator>>(Plist<T> &l)
  2. {
  3.    l.add(this->clone());
  4.    return l;
  5. };
  6. //et la pouvoir faire
  7. entier(666)>>entier(554)>>l;


 
[:ddr555]
 
 :pt1cable:  


 
Je veux pas faire chier, mais ça me semble pas changer le sens d'évaluation


---------------
Le Tyran
Reply

Marsh Posté le 27-01-2003 à 20:36:17    

LetoII a écrit :


 
Je veux pas faire chier, mais ça me semble pas changer le sens d'évaluation


 
 
mmm correct !
[:ddr555]

Reply

Marsh Posté le 27-01-2003 à 20:48:41    

karim63 a écrit :


 
 
mmm correct !
[:ddr555]


 
arf [:ddr555]


---------------
Le Tyran
Reply

Marsh Posté le 27-01-2003 à 21:41:06    

je trouve cette idée malsaine :)


---------------
Angel Eyes, j'en raffole tous les matins... :pt1cable:  
Reply

Marsh Posté le 27-01-2003 à 21:48:22    

que je sache, si on a deux opérateurs identiques, c'est celui de gauche qui est prioritaire... je doute que tu arrives à tes fins
 
Mais pourquoi vouloir a >> b >> c au lieu de c << b << a ??
 
Remarque, je vois bien un moyen par création d'une classe équivalente à un entier que tu pourrais enfiller, mais il faut que ton enfillade soit commutative => on ne change pas l'interprétation de gauche à droite. Pour aller vite, je crois que tu peux faire un héritage sur le type entier, mais ça dépend peut-être du compilo.


---------------
Angel Eyes, j'en raffole tous les matins... :pt1cable:  
Reply

Marsh Posté le 27-01-2003 à 21:57:05    

Code :
  1. template<class T> Plist<T>& operator>>=(T* Pobj,Plist<T>& l)
  2. {
  3.   l.add(Pobj);
  4.   return l;
  5. };


 
J'ai resolu le probleme [:zerod]
Avec cet operateur qui est en bas de cette page, ça marche http://www-agrw.informatik.uni-kl. [...] dence.html
 
benh je voulait juste un operateur pour ajouter en queue ou en tete.
Merci SchnapsMann  :D

Reply

Marsh Posté le 28-01-2003 à 06:48:48    

karim63 a écrit :

C'est une grosse lacune du c++ de pas pouvoir definir des operateurs existant pas. ( c moi qui le dit :D )

Ça arrive.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed