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