Я пытаюсь перегрузить оператор запятой функцией, не являющейся другом, как этот:
#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;
}
По сути, я пытаюсь использовать запятую с обеих сторон, с плавающей точкой. Наличие функции-члена позволяет мне писать obj, float_val
, в то время как наличие дополнительной вспомогательной функции, не являющейся другом, позволяет мне писать float_val, obj
; но функция-член не вызывается.
GCC плачет:
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
Примечание:
Я понимаю, что перегрузка операторов, которая тоже перегружает запятую, сбивает с толку и вовсе не рекомендуется с точки зрения пуриста. Я просто изучаю нюансы C ++ здесь.