Hola lista,
Estoy escribiendo una clase para manejar unidades. Le agregué conversión
automatica a double, y constructor de copia desde double, además de los
operadores aritmeticos y de comparación.
El problema es que me surgen ambiguedades cuando hago:
Unit u(10.1);
int a = u + 5; // ambiguedad operator+ (Unit, Unit) ;
operator+(double,int)
Mi espectativa es que cuando se pueda use Unit, o sea, que convierta el 5 a
Unit y aplique operator+(Unit, Unit).
Cómo puedo deshacerme de esta ambiguedad de forma correcta?
Gracias.
La clase está declarada así:
class Unit
{
public:
Unit();
Unit(const double &Value);
virtual ~Unit();
//! conversion implicita a double
operator double();
// --------------------------------- ASIGNACION
-------------------------------
Unit& operator=(const Unit &rhs);
Unit& operator+=(const Unit &rhs);
Unit& operator-=(const Unit &rhs);
Unit& operator*=(const Unit &rhs);
Unit& operator/=(const Unit &rhs);
// --------------------------------- COMPARACION
-------------------------------
bool operator==(const Unit &rhs)const;
private:
double value_; ///< Valor de la unidad
};
// --------------------------------- COMPARACION
-------------------------------
bool operator!=(const Unit &lhs, const Unit &rhs);
bool operator<(const Unit &lhs, const Unit &rhs);
bool operator>(const Unit &lhs, const Unit &rhs);
bool operator<=(const Unit &lhs, const Unit &rhs);
bool operator>=(const Unit &lhs, const Unit &rhs);
// -------------------------------- ARITMETICA
------------------------------
const Unit operator+(const Unit &lhs, const Unit &rhs);
const Unit operator-(const Unit &lhs, const Unit &rhs);
const Unit operator*(const Unit &lhs, const Unit &rhs);
const Unit operator/(const Unit &lhs, const Unit &rhs);
Saludos
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion