Zunächst mag es so aussehen, als würde ich nach subjektiven Meinungen fragen, aber das ist nicht das, wonach ich strebe. Ich würde gerne einige fundierte Argumente zu diesem Thema hören.
In der Hoffnung, einen Einblick in das Design eines modernen Streams / Serialisierungs-Frameworks zu bekommen, habe ich mir kürzlich eine Kopie des Buches Standard C ++ IOStreams and Locales von Angelika Langer und Klaus Kreft besorgt . Ich dachte mir, wenn IOStreams nicht gut gestaltet wäre, hätte es es überhaupt nicht in die C ++ - Standardbibliothek geschafft.
Nachdem ich verschiedene Teile dieses Buches gelesen habe, habe ich Zweifel, ob IOStreams aus architektonischer Sicht mit der STL vergleichbar ist. Lesen Sie beispielsweise dieses Interview mit Alexander Stepanov (dem "Erfinder" der STL) , um mehr über einige Designentscheidungen zu erfahren, die in die STL eingeflossen sind.
Was mich besonders überrascht :
Es scheint unbekannt zu sein, wer für das Gesamtdesign von IOStreams verantwortlich war (ich würde gerne Hintergrundinformationen dazu lesen - kennt jemand gute Ressourcen?);
Sobald Sie unter die unmittelbare Oberfläche von IOStreams eintauchen, z. B. wenn Sie IOStreams mit Ihren eigenen Klassen erweitern möchten, gelangen Sie zu einer Schnittstelle mit ziemlich kryptischen und verwirrenden Mitgliedsfunktionsnamen, z. B.
getloc
/imbue
,uflow
/underflow
,snextc
/sbumpc
/sgetc
/sgetn
,pbase
/pptr
/epptr
(und es gibt wahrscheinlich noch schlimmere Beispiele). Dies macht es so viel schwieriger, das Gesamtdesign und die Zusammenarbeit der einzelnen Teile zu verstehen. Sogar das Buch, das ich oben erwähnt habe, hilft nicht so viel (IMHO).
Also meine Frage:
Wenn Sie Richter von den heutigen Software - Engineering - Standards haben (wenn es tatsächlich ist eine allgemeine Einigung über diese), würde C ++ 's iostreams noch berücksichtigt wird gut gestaltet? (Ich möchte meine Fähigkeiten im Bereich Software-Design nicht durch etwas verbessern, das allgemein als veraltet gilt.)
std::streambuf
ist die Basisklasse zum Lesen und Schreiben von Bytes und istream
/ ostream
oder zum formatierten Ein- und Ausgeben, wobei ein Zeiger std::streambuf
als Ziel / Quelle verwendet wird.
ostream foo(&somebuffer); foo << "huh"; foo.rdbuf(cout.rdbuf()); foo << "see me!";