Ausgabestream zuweisen?
-
Hallo zusammen,
ich habe eine Nachrichtenklasse und möchte deren Ausgabestrom innerhalb meines Programmes ändern/zuweisen. Also etwa folgendes:
// msg.h class MyMsg { // ... public: ostream & theMsgStream() const; }; // msg.cpp ostream & MyMsg::theMsgStream() const { static ostream * os = &clog; return *os; } // main.cpp int main() { // ... MyMsg m; // nutzt clog m.theMsgStream() << "TEST Nachricht" << endl; // OK, funktioniert // Stream auf cerr ändern m.theMsgStream() = &cerr; // Fehler beim Compilieren // ... }
Wie muss ich die Zuweisung gestalten, damit obiges funktioniert?
Dank und Grüsse
-
Hier könntest du entweder statt einer Zuweisung von außen per rdbuf() am zurückgegebenen Stream rumpfuschen (siehe Doku), eine Referenz auf einen Zeiger zurückgeben (dann müsstest du beim Ausgeben aber dereferenzieren) oder eine Proxyklasse schreiben, die alles von ostream weiterleitet und nur operator= hinzufügt.
Äh... wie wäre es einfach mit getMsgStream() und setMsgStream()?
-
Danke für deine Antwort.
operator void schrieb:
Äh... wie wäre es einfach mit getMsgStream() und setMsgStream()?
Das ginge alternativ natürlich auch. Dann müsste ich eine Membervariable definierten. Das Problem mit der Zuweisung würde aber bleiben.
Werde mich mal über rdbuf() schlau machen.