Salut,
J'essaie de modifier une classe existante, mais je suis confronté à un léger problème de compréhension...
Je vais essayer de me restreindre plus ou moins au strict minimum :
Code :
- template<class T>
- class field : public interface
- {
- field(T& object) : interface((const void*) &object) { ... }
- field& operator=(const T& value)
- {
- * (T*) address_ = value;
- ...
- return *this;
- }
- field operator,(const T& value)
- {
- ...
- return *this;
- }
- };
- template<class T>
- field<T> makefield(T& object) { return field<T>(object); }
- class TObject : public interface {
- public:
- TObject() : interface() {...}
- TObject(const TObject& o) : interface((const interface& ) o){...}
- template<class T>
- TObject& operator=(field<T> object)
- {
- (interface& ) *this = object;
- ...
- return *this;
- }
- template<class T>
- TObject& operator,(const T& value)
- {
- ...
- return *this;
- }
- };
|
L'appel se fait de la manière suivante :
Code :
- map<char,TObject> Truc;
- int Champ;
- 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 :
- map<char,TObject> =
- makefield [field<int>]
- = [field<int>]
- = [TObject]
- , [TObject]
- , [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.
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)...