estoy tratando de sobrecargar el operador coma con una función no miembro no amigo así:¿Por qué no se llama a mi operador de coma sobrecargado?
#include <iostream>
using std::cout;
using std::endl;
class comma_op
{
int val;
public:
void operator,(const float &rhs)
{
cout << this->val << ", " << rhs << endl;
}
};
void operator,(const float &lhs, const comma_op &rhs)
{
cout << "Reached!\n"; // this gets printed though
rhs, lhs; // reversing this leads to a infinite recursion ;)
}
int main()
{
comma_op obj;
12.5f, obj;
return 0;
}
Básicamente, estoy tratando de conseguir el operador coma utilizable por ambos lados, con un flotador. Tener una función de miembro solo me permite escribir obj, float_val
, mientras que tener una función adicional de ayuda no miembro no amigo me permite escribir float_val, obj
; pero la función de operador miembro no se llama.
GCC grita:
comma.cpp: In function ‘void operator,(const float&, const comma_op&)’:
comma.cpp:19: warning: left-hand operand of comma has no effect
comma.cpp:19: warning: right-hand operand of comma has no effect
Nota:. Soy consciente de que la sobrecarga de operadores, que también sobrecargar op coma, es confuso y no es en absoluto aconsejable desde el punto de vista de un purista. Estoy aprendiendo los matices de C++ aquí.
Como un punto de estilo, creo que generalmente se considera imprudente redefinir el significado de los operadores, ya que eso lleva a un código difícil de mantener: es a * b haciendo una multiplicación o ha sido redefinido como un vector cruzado ¿producto? (Algunos dirían que uno está bien.) – Skizz
@Skizz: supongo que te has perdido la cuenta, lo que he mencionado en el _Nota_ desde el principio de esta publicación. – legends2k
y la sobrecarga de coma a menudo es especialmente problemático debido a su baja precedencia –