PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stream Funktion definieren,


HB
2008-03-11, 09:14:54
Hi,

ich würde gern eine Funktion in C++ definieren, die sich wie z.B. ".. << std::setw(1) << .." verwenden läßt. Die also in einen Stream eingefängt werden kann, einen Parameter erhält und dies verarbeitet und eine Ausgabe in den Stream schiebt. Ich hatte an etwas der Art gedacht, aber dies funktioniert nicht:
std::ostream& myy(std::ostream& out, int i)
{
out << (2*i);
return out;
}

danke

Expandable
2008-03-11, 11:43:19
Was genau funktioniert denn nicht?

Trap
2008-03-11, 12:33:40
Sowas wie setw oder setfill sind Klassen mit einem globalen binären operator<<.

HB
2008-03-11, 12:42:49
ahh, und das ist keine Funktion, sondern ein Konstruktor?

Trap
2008-03-11, 12:50:43
Ja. Kannst ja im Source der C++-Bibliothek deines Compilers nachgucken wie man sowas schreibt.

Gast
2008-03-11, 13:38:09
danke!

HB
2008-03-14, 09:45:26
Kann ich auch irgendwie eine alternative zu cout implementieren? Ich möchte nämlich versuchen einen kompletten Streamabschnitt synchronisiert an eine Logger Klasse weiterzuleiten. D.h. man sollte diese Klasse wie ein cout benutzen können und alles was einen operator<< mit ostream implementiert da rein streamen können, wenn die Ausgabe fertig ist, müßte man wohl auch ein alternatives endl o.ä. haben. Ich möchte dann den gesamten Stream Abschnitt, welcher von einem myout bis zu einem myendl als String an eine logger Funktion geben.

Ich hatte mir das so vorgestellt, daß ich eine Klasse nicht mit globalen, sondern member operator<< für einen ostream implementiere. Dieser stream wird dann in einer stream variable gespeichert und ich implementiere den << operator dann zusätzlich für ein dummy-objekt vom Typ myendl um das Ende des Streams zu haben (evtl. ist das gar nicht nötig). Dann wird im Destruktor des myout stack-objekts der Stream an den Logger geschickt.

Kann das so funktionieren? Aktuell scheitert es schon daran, daß ich irgendwie schon nicht den richtigen Stream für meine Klasse finde. Was wäre da das passende bzw. ist dies überhaupt der richtige Weg? danke

HB
2008-03-18, 13:27:25
Jemand eine Idee zu diesen Stream Objekten?

Gast
2008-03-18, 14:00:05
http://c-plusplus.de/forum/viewtopic-var-t-is-167423.html

HB
2008-03-19, 14:20:58
Danke, aber ich finde dazu nichts. Habe mir den ganzen Artikel durchgelesen, und vieles zu diversen Ausgabemanipulatoren gelesen, aber ein Objekt das einen kompletten stream entgegennimmt wie oben gemeint, als wie ein cout habe ich dort nicht beschrieben gefunden.

Gast
2008-03-21, 03:56:39
Ich versteh immer noch nicht was du willst.

HB
2008-03-26, 08:34:57
Ich würde gern einen Ersatz für cout haben, das mir einen Stream liefert über alles was in eine Zeile reingestreamt wurde.

Also jedes Objekt, was nach cout mit dem <<-operator gestreamt werden kann, soll auch dahin gestreamt werden können. Wenn die Operation mit einem endl oder einer alternativen Implementation abgeschlossen wurde, möchte ich diesen Stream weiterverarbeiten in dem ich ihn an einen Logger schicke.

Also wenn ich sowas mache:

int i = 0;
myImplOfcout << "Text mit i=" << i << myImplOfendl;

würde ich dann gern einen Stringstream haben, der "Text mit i=0" enthält.