Operatoren in globalen namespace?
-
Hallo,
angenommen ich habe eine Klasse in einem namespace, sollte man dann etwaige Operator-Überladungen in dem zugehörigen namespace definieren oder global? Also etwa so ein Code:
namespace stuff { struct mystruct { int value; }; // Variante 1: std::ostream &operator<<(std::ostream &str, mystruct const &my) { stream << my.value; return stream; } } // Oder Variante 2: std::ostream &operator<<(std::ostream &str, stuff::mystruct const &my) { stream << my.value; return stream; }Gibt es hier ein "best-practise" oder eine Empfehlung oder ist das egal?
-
Immer im jeweiligen Namensraum. Die Definition im globalen Namensraum hat keinerlei Vorteil, könnte aber u.U. zu unerwarteter Anwendung des Operators/Mehrdeutigkeiten führen (wenn die zugehörige Klasse über entsprechende Konvertierungsmöglichkeiten verfügt) - oder umgekehrt dazu, dass der Operator wegen Verdeckung nicht gefunden wird.
-
Ok, alles klar, Danke

Dann werd ich das in Zukunft so handhaben.