Question

Lors de la création d'une bibliothèque dans un espace de noms particulier, il est souvent pratique de fournir des opérateurs surchargés pour les classes de cet espace de noms. Il semble (au moins avec g ++) que les opérateurs surchargés puissent être implémentés soit dans l'espace de noms de la bibliothèque:

namespace Lib {
class A {
};

A operator+(const A&, const A&);
} // namespace Lib

ou l'espace de noms global

namespace Lib {
class A {
};
} // namespace Lib

Lib::A operator+(const Lib::A&, const Lib::A&);

D'après mes tests, les deux semblent bien fonctionner. Existe-t-il une différence pratique entre ces deux options? Est-ce que l'une ou l'autre approche est meilleure?

Était-ce utile?

La solution

Vous devez les définir dans l’espace de noms de la bibliothèque. Le compilateur les trouvera malgré tout grâce à la recherche dépendante des arguments.

Inutile de polluer l'espace de noms global.

Autres conseils

La mise dans l'espace de noms de la bibliothèque fonctionne à cause de la recherche Koenig .

Vous devez le définir dans l’espace de noms, car la syntaxe sera moins détaillée et ne pas encombrer l’espace de noms global.

En fait, si vous définissez vos surcharges dans la définition de votre classe, cela devient une question sans objet:

namespace Lib {

class A {
public:
    A operator+(const A&);
};

} // namespace Lib
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top