Frage

Wenn Sie eine Bibliothek in einem bestimmten Namespace-Authoring, ist es oft bequem in diesem Namensraum überladene Operatoren für die Klassen zur Verfügung zu stellen. Es scheint (zumindest mit g ++), dass die überladenen Operatoren implementiert werden können entweder in der Bibliothek des Namespace:

namespace Lib {
class A {
};

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

oder der globale Namespace

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

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

Von meinen Tests, scheinen sie beide gut zu funktionieren. Gibt es einen praktischen Unterschied zwischen diesen beiden Optionen? Entweder Ansatz besser?

War es hilfreich?

Lösung

Sie sollten sie in der Bibliothek Namensraum definieren. Der Compiler wird sie trotzdem durch Argument abhängige Lookup finden.

Keine Notwendigkeit, den globalen Namensraum verschmutzen.

Andere Tipps

Um es in die Bibliothek Namespace funktioniert, weil die Koenig-Lookup .

Sie sollten es im Namensraum definieren, da sowohl die Syntax weniger ausführlich sein und nicht den globalen Namensraum Krempel.

Eigentlich, wenn Sie Ihre Überlastungen in Ihrer Klassendefinition definieren, wird dies eine offene Frage:

namespace Lib {

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

} // namespace Lib
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top