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

Classes et opérateurs, code incompréhensible... - C++ - Programmation

Marsh Posté le 27-07-2007 à 15:51:11    

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)...

Reply

Marsh Posté le 27-07-2007 à 15:51:11   

Reply

Marsh Posté le 27-07-2007 à 16:45:29    

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 & )

Reply

Sujets relatifs:

Leave a Replay

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