Mi piacerebbe definire un operatore binario nello spazio dei nomi globale. L'operatore funziona su una classe definita in un altro spazio dei nomi e l'operatore deve ottenere l'accesso ai membri privati di tale classe. Il problema che ho è che non lo so sapere come ambito quell'operatore globale quando lo si fa amico nella definizione della classe.Come definire gli amici nello spazio dei nomi globale all'interno di un altro spazio dei nomi C++?
ho provato qualcosa di simile:
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;
...
}
Il compilatore (g ++ 4.4) non sapeva che cosa fare con esso. Sembra che la linea
friend A ::operator *()
viene valutato come qualcosa di simile (pseudo-codice)
(A::operator)
invece di
(A) (::operator)
Se lascio il :: nella dichiarazione del l'operatore la compilazione funziona ma l'operatore è quindi nello spazio dei nomi NOME e non nello spazio dei nomi globale.
Come posso qualificare lo spazio dei nomi globale in una situazione del genere?
Ecco 3 risposte quasi identiche ora :-) – finnw
Sicuramente, intendi * solo * tre :) –