Klasse mit generischem output (ostream, sstream, usw)
-
Hallo,
ich hab eine Klasse, die wirft im moment alles nach std::cout raus. Nun würd ich das verhalten gerne konfigurierbar halten und den Stream, wohin es schreiben soll über den constructor der klasse konfigurieren.
Von welchem Typ muss die Klassenvariable sein, um weiterhin var << "text" << std::endl; usw nutzen zu können?
std::ostream? Muss diese dabei ein Pointer oder eine referenz sein? Ich bin mir nicht sicher. Wenn es ein "std::ostream &" ist, dann muss dieser ja im constructor sofort konstruiert werden, sehe ich das richtig? Ist der Typ überhaupt dafür korrekt?
-
Es muss keine Referenz sein, wär sogar besser ohne, außer du kannst garantieren, dass das ostream-Objekt hinter der Referenz länger exisitert als dein Objekt, das darauf zugreift.
Ansonsten bietet sich eine Logger-Klasse an (log4cxx schon angeschaut?) da ich annehme es geht um ein ordentliches Logging.
-
Ostream ist die Klasse, die du suchst. Welche Verwendungsweise von ostream die optimale für dich ist, hängt natürlich davon ab, was du genau machen möchtest. Lies dir mal die Beschreibungen und Beispiele zu ostream.tie() und ostrem.rdbuf() auf www.cplusplus.com durch, danach dürftest du selbst ein paar Ideen haben, was für deinen Fall geeignet ist.
-
tandem schrieb:
Es muss keine Referenz sein, wär sogar besser ohne, außer du kannst garantieren, dass das ostream-Objekt hinter der Referenz länger exisitert als dein Objekt, das darauf zugreift.
Doch, muss es sein, denn ostreams sind nicht copy-constructible.
-
Danke für die hilfe.
Im Endeffekt war es doch leichter, als ich dachte std::ostream & als variable, im constructor ein defailt std::cout als stream und bei bedarf andere streams wie stringstream.