std::basic_streambuf<CharT,Traits>:: underflow
|
protected
:
virtual int_type underflow ( ) ; |
||
Garantiza que al menos un carácter esté disponible en el área de entrada actualizando los punteros al área de entrada (si es necesario) y leyendo más datos de la secuencia de entrada (si corresponde). Devuelve el valor de ese carácter (convertido a
int_type
con
Traits
::
to_int_type
(
c
)
) en caso de éxito o
Traits
::
eof
(
)
en caso de fallo.
La función puede actualizar
gptr
,
egptr
y
eback
para definir la ubicación de los datos recién cargados (si los hay). En caso de fallo, la función garantiza que
gptr
(
)
==
nullptr
o
gptr
(
)
==
egptr
.
La versión de la función en la clase base no hace nada. Las clases derivadas pueden sobrescribir esta función para permitir actualizaciones en el área de obtención en caso de agotamiento.
Contenidos |
Parámetros
(ninguno)
Valor de retorno
El valor del carácter apuntado por el get pointer después de la llamada en caso de éxito, o Traits :: eof ( ) en caso contrario.
La versión de la clase base de la función devuelve traits :: eof ( ) .
Nota
Las funciones públicas de std::streambuf llaman a esta función solo si gptr ( ) == nullptr o gptr ( ) >= egptr ( ) .
Ejemplo
#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); }
Salida:
This is an example
Véase también
|
[virtual]
|
lee caracteres de la secuencia de entrada asociada al área de obtención y avanza el siguiente puntero
(función miembro protegida virtual) |
|
[virtual]
|
escribe caracteres en la secuencia de salida asociada desde el área de colocación
(función miembro protegida virtual) |
|
[virtual]
|
lee del archivo asociado
(función miembro protegida virtual de
std::basic_filebuf<CharT,Traits>
)
|
|
[virtual]
|
devuelve el siguiente carácter disponible en la secuencia de entrada
(función miembro protegida virtual de
std::basic_stringbuf<CharT,Traits,Allocator>
)
|
|
[virtual]
|
lee un carácter de la secuencia de entrada sin avanzar el siguiente puntero
(función miembro protegida virtual de
std::strstreambuf
)
|