Eventuali duplicati:
Where should non-member operator overloads be placed?overloading degli operatori e gli spazi dei nomi
Durante la navigazione su SO, spesso trovo domande o risposta che coinvolge sovraccarico/che definiscono un std::ostream& operator<<(std::ostream& os, const Foo& foo)
o un Foo operator+(const Foo& l, const Foo& r)
.
Mentre so come e quando (non) scrivere questi operatori, sono confuso riguardo alla cosa namespace
.
Se ho la seguente classe:
namespace bar
{
class Foo {};
}
In quali namespace
dovrei scrivere le diverse definizioni operatore?
// Should it be this
namespace bar
{
std::ostream& operator<<(std::ostream& os, const Foo& foo);
}
// Or this ?
namespace std
{
ostream& operator<<(ostream& os, const bar::Foo& foo);
}
// Or this ?
std::ostream& operator<<(std::ostream& os, const bar::Foo& foo);
La stessa domanda si applica allo operator+
. Quindi, qual è la buona pratica qui e perché?
duplicati di [Dove dovrebbe sovraccarichi dell'operatore non membro?] (http: // stackoverflow.it/questions/3623631/overloading-operator) –
@James McNellis: Non sono riuscito a trovare una domanda simile. Grazie;) – ereOn
Tieni presente che il secondo è in realtà illegale, puoi aggiungere solo specializzazioni allo spazio dei nomi 'std'. – GManNickG