Spazi dei nomi e sovraccarico dell'operatore in C ++
-
05-07-2019 - |
Domanda
Quando si crea una libreria in un determinato spazio dei nomi, è spesso utile fornire operatori sovraccarichi per le classi in quello spazio dei nomi. Sembra (almeno con g ++) che gli operatori sovraccarichi possano essere implementati nello spazio dei nomi della libreria:
namespace Lib {
class A {
};
A operator+(const A&, const A&);
} // namespace Lib
o lo spazio dei nomi globale
namespace Lib {
class A {
};
} // namespace Lib
Lib::A operator+(const Lib::A&, const Lib::A&);
Dai miei test, entrambi sembrano funzionare bene. C'è qualche differenza pratica tra queste due opzioni? Entrambi gli approcci sono migliori?
Soluzione
Dovresti definirli nello spazio dei nomi della libreria. Il compilatore li troverà comunque tramite la ricerca dipendente dall'argomento.
Non è necessario inquinare lo spazio dei nomi globale.
Altri suggerimenti
Metterlo nello spazio dei nomi della biblioteca funziona grazie a Ricerca Koenig .
Dovresti definirlo nello spazio dei nomi, sia perché la sintassi sarà meno dettagliata che non ingombra lo spazio dei nomi globale.
In realtà, se definisci i tuoi sovraccarichi nella definizione della classe, questa diventa una domanda controversa:
namespace Lib {
class A {
public:
A operator+(const A&);
};
} // namespace Lib