Me gustaría definir un operador binario en el espacio de nombre global. El operador trabaja en una clase que está definida en otro espacio de nombres y el operador debe obtener el acceso a los miembros privados de esa clase. El problema que tengo es que no conozco el alcance de ese operador global cuando lo hago amigo en la definición de la clase.¿Cómo puedo definir amigos en el espacio de nombres global dentro de otro espacio de nombres C++?
he intentado algo así como:
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;
...
}
El compilador (g ++ 4.4) que no sabía qué hacer con él. Parece que la línea
friend A ::operator *()
se evalúa como algo parecido (pseudo-código)
(A::operator)
en lugar de
(A) (::operator)
Si dejo el :: en la declaración de la Operador de la compilación funciona pero el operador se encuentra en el espacio de nombres NOMBRE y no en el espacio de nombres global.
¿Cómo califico el espacio de nombre global en una situación así?
Eso es 3 respuestas casi idénticas ahora :-) – finnw
Seguramente, te refieres * solo * tres :) –