Per l'eleganza, l'incapsulamento e lo sfruttamento di ADL (Argument Dependent Lookup) è comune definire una funzione all'interno dello spazio dei nomi dell'argomento della funzione.Qual è il miglior spazio dei nomi per un operatore binario?
Supponiamo di avere due librerie in uno spazio dei nomi diverso. Ci sono tre casi 1) uno fa parte di una libreria che io controllo e l'altro è di terze parti (ad esempio Boost), oppure 2) Controllo entrambi, o 3) Non ne controllo nessuno (basta scrivere il codice "glue").
ho qualcosa di simile,
namespace ns_A{
struct A{...}; // something that looks like iostream
}
namespace ns_B{
struct B{...};
}
voglio "stream" B in A, qual è l'opzione migliore
namespace ???{ // what is more correct ns_A, or ns_B?
A& operator<<(A& a, B const& b){...}
}
o dovrei metterlo in entrambi gli spazi dei nomi?
namespace ns_B{
A& operator<<(A& a, B const& b){...}
}
namespace ns_A{
using ns_B::operator<<;
}
Quale è il miglior spazio dei nomi per definire una funzione binaria come questo?
(Vuol C++ 11 del namespace in linea cambiano ogni raccomandazione?)
(io uso l'esempio operator<<
perché, a parità di condizioni si sembra intuitivamente essere meglio preferire namespace ns_B
.)
Non giocherellare con lo spazio dei nomi che non si controlla. – Walter