Я хотел бы определить бинарный оператор в глобальном пространстве имен. Оператор работает над классом, который определен в другом пространстве имен, и оператор должен получить доступ к частным членам этого класса. Проблема в том, что я не знаю, как охватить этот глобальный оператор, сделав его другом в определении класса.Как определить друзей в глобальном пространстве имен в другом пространстве имен C++?
Я пытался что-то вроде:
namespace NAME
{
class A {
public:
friend A ::operator * (double lhs, const A& rhs);
private:
int private_var;
};
}
A operator * (double lhs, const A& rhs)
{
double x = rhs.private_var;
...
}
компилятор (г ++ 4.4) не знал, что делать с ним. Кажется, что линия
friend A ::operator *()
оценивается как нечто вроде (псевдо-код)
(A::operator)
вместо
(A) (::operator)
Если я выхожу из :: в объявлении из оператор компиляции работает, но оператор находится в пространстве имен NAME, а не в глобальном пространстве имен.
Как я могу квалифицировать глобальное пространство имен в такой ситуации?
Это 3 почти идентичные ответы сейчас :-) – finnw
Конечно, вы имеете в виду * только * три :) – 2010-02-05 14:38:26