friend + namespace -> richtiger Syntax ?
-
Tag zusammen,
kurze Frage:
Wie lautet der korrekte Syntax für die friend decleration ?namespace MyNamespace { class Test { private: friend std::ostream& operator<<( std::ostream& ostream, const MyNamespace::Test& object ); unsigned int m_a; }; } std::ostream& operator<<( std::ostream& ostream, const MyNamespace::Test& object ) { ostream << object.m_a; return ostream; }Ohne den namespace klappts, nur mit nicht...

-
#include <iostream> using namespace std; namespace MyNamespace { class Test { private: friend std::ostream& operator<<( std::ostream& ostream, const MyNamespace::Test& object ); unsigned int m_a; }; std::ostream& operator<<( std::ostream& ostream, const MyNamespace::Test& object ) { ostream << object.m_a; return ostream; } } int main() { MyNamespace::Test t; cout<<t<<endl; }Das klappt bei mir ohne Probleme. Was willst du genau erreichen?
-
Ich möchte die Funktion im globalen namespace haben. In deinem Beispiel ist sie ja in den "MyNamespace" gerutscht ?
-
Der Gast schrieb:
Ich möchte die Funktion im globalen namespace haben. In deinem Beispiel ist sie ja in den "MyNamespace" gerutscht ?
Ich weis nicht, ob das überhaupt geht. Mir fällt nichts ein. Warum willst du das?
-
Der Gast schrieb:
Ich möchte die Funktion im globalen namespace haben.
dann deklariere sie (vorher) im globalen namespace.
nur: warum würdest du das tun wollen?
-
Vielleicht gehts ja indem du explizit sagst dass es nicht MyNamespace::operator<< sonder ::operator<< ist: (habs nicht ausprobiert)
Dennoch solltst du alles was zusammengehört auch in den selben ns legen, und der op<< gehört nunmal zum Interface der Klasse und damit in den gleichen ns.namespace MyNamespace { class Test { private: friend std::ostream& ::operator<<( std::ostream& ostream, const MyNamespace::Test& object ); // ::operator<< unsigned int m_a; }; }
-
pumuckl schrieb:
Vielleicht gehts ja indem du explizit sagst dass es nicht MyNamespace::operator<< sonder ::operator<< ist: (habs nicht ausprobiert)
operator<< muss vorher im globalen namespace deklariert worden sein (ansonsten wäre das ill-formed, weil diese form von friend-deklaration keine namen einführen kann (in kein scope, auch nicht versteckt))
Dennoch solltst du alles was zusammengehört auch in den selben ns legen, und der op<< gehört nunmal zum Interface der Klasse und damit in den gleichen ns.
das meine ich auch.