Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1689 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Classes et opérateurs, code incompréhensible...

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Classes et opérateurs, code incompréhensible...

n°1592470
SkippyleGr​andGourou
Posté le 27-07-2007 à 15:51:11  profilanswer
 

Salut,
 
J'essaie de modifier une classe existante, mais je suis confronté à un léger problème de compréhension...  :sweat:  
 
Je vais essayer de me restreindre plus ou moins au strict minimum :
 

Code :
  1. template<class T>
  2. class field : public interface
  3. {
  4.       field(T& object) : interface((const void*) &object) { ... }
  5.       field& operator=(const T& value)
  6.       {
  7.         * (T*) address_ = value;
  8.         ...
  9.         return *this;
  10.       }
  11.       field operator,(const T& value)
  12.       {
  13.         ...
  14.         return *this;
  15.       }
  16. };
  17. template<class T>
  18. field<T> makefield(T& object) { return field<T>(object); }
  19. class TObject : public interface {
  20.    public:
  21.       TObject() : interface() {...}
  22.       TObject(const TObject& o) : interface((const interface& ) o){...}
  23.       template<class T>
  24.       TObject& operator=(field<T> object)
  25.       {
  26.         (interface& ) *this = object;
  27.         ...
  28.         return *this;
  29.       }
  30.       template<class T>
  31.       TObject& operator,(const T& value)
  32.       {
  33.         ...
  34.         return *this;
  35.       }
  36. };


 
L'appel se fait de la manière suivante :

Code :
  1. map<char,TObject> Truc;
  2. int Champ;
  3. Truc = makefield(Champ) = 0,1,2;


 
Mon problème c'est que si l'opérateur '=' suivant l'appel à makefield correspond bien à l'opérateur de la classe field, les opérateurs ',' appartiennent à la classe TObject ! En fait, la ligne "Truc = ..." est interprétée grosso modo de la manière suivante :

Code :
  1. map<char,TObject> =
  2. makefield [field<int>]
  3. = [field<int>]
  4. = [TObject]
  5. , [TObject]
  6. , [TObject]


 
Est-ce que quelqu'un pourrait m'expliquer le pourquoi du comment ? Où/Quand/Comment se fait le passage de field<int> à TObject ?
 
Merci. :jap:
 
PS: Au cas où les extraits ne suffisent pas, je pose temporairement le code en question ici.
PPS: Au passage, si les gens pouvaient me donner leur avis sur cette manière de coder (personnellement j'aime pas du tout, mais je saurais pas dire si c'est spécialement propre ou pas)...

mood
Publicité
Posté le 27-07-2007 à 15:51:11  profilanswer
 

n°1592525
Taz
bisounours-codeur
Posté le 27-07-2007 à 16:45:29  profilanswer
 

dégueux. vire donc toutes ces saloperies de casts de l-value déjà !
 
sans même rentrer dans les détails, 0, 1 et 2 sont des constantes littérales, impossible de former des référence dessus et donc de correspondre à ton field<T = int>(int & )


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Classes et opérateurs, code incompréhensible...

 

Sujets relatifs
A propos de PHP5, des classes, de la POOPHP + Xajax + Html : code crado, solution : Moteur de template ?
Executer une partie de code ou une autreManipulations IE6 par le code C++
Modifier les options avancée IE6 par le codeCode pour changer les valeurs dans un shapesheet
[BATCH/cURL] Selectionner seulement une partie du code[aide] avec quel langage est codé linux ?
Qu'est-ce qui ne vas pas dans mon code php ?Sauvegarder des paramètres et les utiliser dans un code Fortran
Plus de sujets relatifs à : Classes et opérateurs, code incompréhensible...


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR