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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top