Abstraction, Template & operateur
bonjour,
j'ai la structure suivante
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class AcquisitionBase {
private:
double value;
public:
virtual string toString() = 0;
virtual double getInvariantValue() = 0;
}
template<typename T>
class Acquisition: public AcquisitionBase{
private:
T v;
public:
Acquisition(T vlaue) : v(value) {
}
virtual string toString() {
return "information";
}
virtual double getInvariantValue() {
return (double)v;
}
} |
avec
Code:
1 2 3 4
|
typedef float ANALOG;
typedef unsigned short DIGITAL;
typedef bool LOGIC; |
et je veux implémenter l’opérateur + (par exemple mais en fait je vais les faires tous) pour faire des calcul avec
Acquisition<ANALOG> + Acquisition<DIGITAL> etc ....
donc dans le template j'ai ajouté
Code:
1 2 3 4 5
|
virtual Acquisition<T> operator+(AcquisitionBase &ob) {
return Acquisition<T>(
this->getInvariantValue() + ob.getInvariantValue());
} |
mais j'ai l'erreur suivante quand je rajoute l’opérateur pour les littéraux (dont j'ai aussi besoin évidement pour faire Acquisition<ANALOG> + 21)
Code:
1 2 3 4
| template<typename T>
Acquisition<T> operator+(Acquisition<T> &ref, int ob) {
return Acquisition<T>(ref.getInvariantValue() + ob);
} |
ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
étonnamment quand je fais
Code:
1 2 3 4
| template<typename T>
Acquisition<T> operator+(int ob) {
return Acquisition<T>(this->getInvariantValue() + ob);
} |
je n'ai pas d'erreur, mais si j'ai mis un opérateur externe c'est pour résoudre les deux cas
- Acquisition<ANALOG> +21
- 21 + Acquisition<ANALOG>
avec
Code:
1 2 3 4
| template<typename T>
Acquisition<T> operator+(int ob, Acquisition<T> &ref) {
return ref + ob;
} |
bref avez vous une solution pour
- soit éviter d'afficher cette erreur (je suis sur linux avec g++ 4.4.6)
- soit changer la structure
merci et bonne soirée de Noël a vous tous....
NOTA : sur visual studio 2013 j'ai pas d'erreurs