basic_streambuf verwenden...



  • Mis2com schrieb:

    Ich verstehe gar nicht, was das rdbuf soll...

    Das setzt einfach den buffer.
    Woher soll ostream denn sonst wissen, welchen buffer es verwenden soll?



  • und was heißt hier bitte verwenden?
    Was man mit dem, was durch << rein und >> raus geht, macht, entscheidet man doch selber, wozu braucht der dann einen buffer?



  • Mis2com schrieb:

    und was heißt hier bitte verwenden?
    Was man mit dem, was durch << rein und >> raus geht, macht, entscheidet man doch selber, wozu braucht der dann einen buffer?

    Der buffer erledigt die ganze Arbeit! Er puffert und er schreibt.

    der stream macht nur die formatierungen - er achtet auf setw, fill, etc. und er wandelt alles in strings um. Dann gibt er den fertigen string an den buffer weiter - dort wird dann eben gepuffert (oder auch nicht, bei deinem code wird nicht gepuffert) und schreibt die daten dann nach cout.

    woher soll ostream denn wissen, welchen buffer es verwenden soll, wenn man ihm mit rdbuf() nicht sagt welchen puffer er verwenden soll?

    das ganze konzept basiert darauf, dass ein stream 'dumm' ist. ostream macht die arbeit alleine - eine abgeleitete stream klasse ist nur dafuer da, den streambuffer automatisch zu setzen.

    man kann auch
    ostream s(0);
    s.rdbuf(&mein_puffer);

    schreiben - aber da das unpraktisch ist, leitet man eine klasse von ostream ab, die das uebernimmt.



  • Shade Of Mine schrieb:

    [...]weiter - dort wird dann eben gepuffert (oder auch nicht, bei deinem code wird nicht gepuffert) und schreibt die daten dann nach cout.
    [...]

    Jetzt verwirrst du mich, ich kann die Daten doch nicht nur nach cout schreiben
    sondern dorthin wo ich will, oder?



  • SirLant schrieb:

    Jetzt verwirrst du mich, ich kann die Daten doch nicht nur nach cout schreiben
    sondern dorthin wo ich will, oder?

    logisch. ich habe das jetzt nur mal auf den beispielcode bezogen.
    der streambuf ist fuer das verwalten (puffern, schreiben, uU komprimieren oder verschluesseln,...) zustaendig.



  • Mis2com schrieb:

    Ich habe einfach keinerlei Hintergrundwissen zur STL

    Das hat nichts mit der Standard Template Library zu tun - das sind nämlich nur die Container und Algorithmen, die man am einfachsten an den vernünftig gewählten Namen von den IOStreams unterscheiden kann 😉



  • Wieso gehört der streambuf nicht zur STL?
    Wozu denn dann? Es ist ja nichts, was einfach so optional dazu gebaut wird, weil es keine STL Implementierung gibt, die ohne basic_streambuf arbeitet, oder etwa doch?

    Mir ist das jetzt jedenfalls klar, danke.

    MfG Eisflamme



  • operator void ist nur pedantisch.
    Im Prinzip meinen wir die C++ Standard Library wenn wir STL sagen. Denn STL war der Prototyp der Container der C++ Standard Library.

    STL ist also eigentlich falsch - aber es ist so schön kurz 🙂 deshalb verwenden es alle.



  • aber basic_streambuf ist doch auch ein Template!?



  • Hat wer von euch das Buch von Josuttis? Geht das auch auf die Implementierung ein,
    oder nur die Benutzung?
    Gibt es überhaupt nen Buch, dass nicht nur auf die Benutzung eingeht sondern auch,
    wie die Internas und wie man die Klassen erweitert so wie in dem Beispiel von
    Josuttis?
    Oder gibt es so etwas online? Sollte natürlich verständlich sein 🙂

    Und meine Ausgabe über die Ableitung der Streams funktioniert, jetzt muss ich das
    nur noch in meine Konsole zeichnen 🤡




Anmelden zum Antworten