std::basic_streambuf<CharT,Traits>:: underflow
|
protected
:
virtual int_type underflow ( ) ; |
||
Stellt sicher, dass mindestens ein Zeichen im Eingabebereich verfügbar ist, indem die Zeiger auf den Eingabebereich aktualisiert werden (falls erforderlich) und weitere Daten aus der Eingabesequenz gelesen werden (falls zutreffend). Gibt den Wert dieses Zeichens (konvertiert zu
int_type
mit
Traits
::
to_int_type
(
c
)
) bei Erfolg zurück oder
Traits
::
eof
(
)
bei Fehler.
Die Funktion kann die
gptr
-,
egptr
- und
eback
-Zeiger aktualisieren, um den Speicherort neu geladener Daten (falls vorhanden) zu definieren. Bei einem Fehler stellt die Funktion sicher, dass entweder
gptr
(
)
==
nullptr
oder
gptr
(
)
==
egptr
.
Die Basisklassenversion der Funktion tut nichts. Die abgeleiteten Klassen können diese Funktion überschreiben, um Aktualisierungen des Abrufbereichs im Falle von Erschöpfung zu ermöglichen.
Inhaltsverzeichnis |
Parameter
(keine)
Rückgabewert
Der Wert des Zeichens, auf das der get pointer nach dem erfolgreichen Aufruf zeigt, oder Traits :: eof ( ) andernfalls.
Die Basisklassenversion der Funktion gibt traits :: eof ( ) zurück.
Hinweis
Die öffentlichen Funktionen von std::streambuf rufen diese Funktion nur auf, wenn gptr ( ) == nullptr oder gptr ( ) >= egptr ( ) .
Beispiel
#include <iostream> #include <sstream> class null_filter_buf : public std::streambuf { std::streambuf* src; char ch; // single-byte buffer protected: int underflow() { traits_type::int_type i; while ((i = src->sbumpc()) == '\0') ; // skip zeroes if (!traits_type::eq_int_type(i, traits_type::eof())) { ch = traits_type::to_char_type(i); setg(&ch, &ch, &ch+1); // make one read position available } return i; } public: null_filter_buf(std::streambuf* buf) : src(buf) { setg(&ch, &ch + 1, &ch + 1); // buffer is initially full } }; void filtered_read(std::istream& in) { std::streambuf* orig = in.rdbuf(); null_filter_buf buf(orig); in.rdbuf(&buf); for (char c; in.get(c);) std::cout << c; in.rdbuf(orig); } int main() { char a[] = "This i\0s \0an e\0\0\0xample"; std::istringstream in(std::string(std::begin(a), std::end(a))); filtered_read(in); }
Ausgabe:
This is an example
Siehe auch
|
[virtual]
|
Liest Zeichen aus der zugehörigen Eingabesequenz in den Get-Bereich und bewegt den Next-Zeiger vorwärts
(virtuelle geschützte Elementfunktion) |
|
[virtual]
|
Schreibt Zeichen aus dem Put-Bereich in die zugehörige Ausgabesequenz
(virtuelle geschützte Elementfunktion) |
|
[virtual]
|
Liest aus der zugehörigen Datei
(virtuelle geschützte Elementfunktion von
std::basic_filebuf<CharT,Traits>
)
|
|
[virtual]
|
Gibt das nächste in der Eingabesequenz verfügbare Zeichen zurück
(virtuelle geschützte Elementfunktion von
std::basic_stringbuf<CharT,Traits,Allocator>
)
|
|
[virtual]
|
Liest ein Zeichen aus der Eingabesequenz ohne Bewegung des Next-Zeigers
(virtuelle geschützte Elementfunktion von
std::strstreambuf
)
|