LogStream



  • Hi!

    Ich wollte gerne meinen eigenen LogStream schreiben, dazu habe ich den operator<< überladen, sieht wie folgt aus:

    template <class T>
    LogStream & operator << (LogStream &stream, const T& value)
    {
    	std::ostringstream sstr;
    
    	sstr << value;
    
    	stream.Write(sstr.str());
    	return stream;
    }
    

    LogStream::Write schreibt das ganze einfach in die Datei.
    Das ist ja soweit auch ganz gut, nur möchte ich jetzt gerne auch sowas unterstützen:

    LogStream s;
    s << "hallo, jetzt kommt eine neue" << std::endl << "Zeile";
    

    Meine Lösung sah bis jetzt so aus, dass ich mir eine Klasse Newline erstellt habe und das Template partiell spezialisiert(stimmt der Ausdruck in dem Kontext?) habe, dann konnte ich schreiben:

    s << "hallo, jetzt kommt eine neue" << Newline() << "Zeile";
    

    Wirklich schön ist das aber nicht, ich würde es lieber wie in der ersten Variente schreiben und am besten auch ohne eine neue Klasse also einfach mit std::endl.

    Hat jemand Vorschläge oder einen Link wo ich das nachlesen kann?
    Vielen Dank
    KaPtainCugel



  • Hallo,
    bau dir doch einfach noch einer Überladung für den op<<, der als rechtes Argument eine Zeiger auf eine Funktion vom Typ ostream& (*)(ostream&) aktzeptiert:

    LogStream & operator << (LogStream &stream, std::ostream& (*man)(std::ostream&)) 
    { 
    ...
    }
    


  • Danke, das ist ja wesentlich einfacher als ich dachte! 👍



  • tippe mal overflow und ostream in die suchfunktion, findes da eine bessere lösung für das logen in ein stream


Anmelden zum Antworten