Bonsoir,
J'ai un code utilisant des expressions templates pour une classe de vecteurs. L'implémentation n'est pas exactement la même que celle proposée par Laurent Gomila dans son tutoriel, mais le problème que j'ai rencontré se trouve aussi dans l'implémentation proposée par Laurent.
Lors de la définition de mes opérateurs surchargés, j'ai (notation de Laurent) pour la multiplication l'opérateur suivant:
qui permet de construire un noeud (de l'arbre syntaxique) qui correspond à la multiplication d'un noeud (à gauche) par un nombre (à droite).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 template <class T>BinaryOp<T, UnaryOp<double, Const>, Mult> operator *(const T& v1, double d) { return MakeMult(v1, MakeConst(d)); }
En parallèle, j'ai une autre classe qui n'a rien à voir avec les vecteurs précédemment définis mais qui possède elle aussi des opérateurs surchargés. Notamment, un opérateur du type:
Et c'est là que les problèmes apparaissent. Lorsque j'essaye d'utiliser cet opérateur avec une instance de A, le compilateur (GCC 4.4.1) me dit qu'il y a un conflit et qu'il ne sait pas quelle version choisir entre la version dédiée aux vecteurs et celle spécifique à A.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 A operator*(const A&, double);
Je ne peux donc pas avoir en même temps des expressions templates et une autre classe surchargeant des opérateurs ! C'est assez ennuyant.
Auriez-vous une solution à ce problème épineux ?
Merci d'avance !
Nanoc
Partager