Eigene von ostream oder istream abgeleitete Klassen erstellen?



  • Ich möchte hier nicht fragen, wie, sondern ob das überhaupt geht? Ich möchte nämlich eine Klasse programmieren, die mit möglichst vielen Dateiarten im weitesten Sinn (also z.B. Diskfile, Datei im RAM, Interprozesskomunikation...) zurecht kommt. Deshalb frage ich, ob es möglich ist, eigene Streamklassen zu erzeugen, bzw. wie aufwendig das ist. Soll ich lieber selbst eine abstrakte Klasse definieren, die die grundlegenden Dinge wie Lesen u. Schreiben enthält und von der ich dann die Dateiarten (z.B. memory_file, disk_file...) ableiten kann? Oder ist es besser, einfach iostream zu verwenden?



  • Hallo,
    in deinem Fall wäre es nicht sinnvoll von istream oder ostream abzuleiten. Vielmehr solltest du wenn überhaupt von basic_filebuf bzw. von basic_streambuf ableiten. Ob und wie sinnvoll das ist, weißt du, wenn du dich ein wenig mit der Architektur der Stream befasst und du dir genauer überlegt hast, was du überhaupt machen willst.

    Ein bischen was zu lesen: http://www.langer.camelot.de/IOStreams/Excerpt/excerpt.htm



  • Ich selber möchte gar nicht ableiten, sondern nur eine Klasse erstellen, die möglichst viele Ein-/Ausgabegeräte unterstützen kann. Kann man z.B. eine von ostream abgeleitete Klasse erstellen, die druckt? Oder eine iostream-Klasse für Interprozesskomunikation?



  • @HumeSikkins: Hab gerade deinen Buchtext gelesen. Ich erschließe daraus, wenn ich einen i-/ostream in meiner Klasse verwende, hat der Benutzer z.B. auch die Möglichkeit, einen Shared Memory-Bereich als Ausgabegerät zu verwenden.

    class serializer
    {
        private:
        ostream *stream;
        public:
        serializer(ostream *Stream) :
            stream(Stream)
            {
            }
        //...   //verschiedene Funktionen zum Schreiben in stream...
    };
    

Anmelden zum Antworten