basic_stringbuf (Clase)
Describe un búfer de secuencia que controla la transmisión bidireccional entre elementos de tipo Elem
—cuyos rasgos de caracteres están determinados por la clase Tr
— y una secuencia de elementos almacenados en un objeto Array.
Sintaxis
template <class Elem, class Tr = char_traits<Elem>,
class Alloc = allocator<Elem>>
class basic_stringbuf : public basic_streambuf<Elem, Tr>
Parámetros
Alloc
Clase de asignador.
Elem
Tipo de elemento básico de la cadena.
Tr
Rasgos de caracteres especializados en el elemento básico de la cadena.
Comentarios
El objeto está asignado, extendido y liberado según sea necesario para dar cabida a los cambios en la secuencia.
Un objeto de clase basic_stringbuf<Elem
, Tr
, Alloc
> almacena una copia del argumento ios_base::
openmode de su constructor como su modo stringbuf
mode:
Si
mode & ios_base::in
es distinto de cero, el búfer de entrada es accesible. Para obtener más información, vea basic_streambuf (Clase).Si
mode & ios_base::out
es distinto de cero, el búfer de salida es accesible.
Constructores
Constructor | Descripción |
---|---|
basic_stringbuf | Construye un objeto de tipo basic_stringbuf . |
Typedefs
Nombre de tipo | Descripción |
---|---|
allocator_type | El tipo es un sinónimo del parámetro de plantilla Alloc. |
char_type | Asocia un nombre de tipo al parámetro de plantilla Elem. |
int_type | Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr. |
off_type | Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr. |
pos_type | Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr. |
traits_type | Asocia un nombre de tipo al parámetro de plantilla Tr. |
Funciones miembro
Función de miembro | Descripción |
---|---|
overflow | Función virtual protegida a la que se puede llamar cuando se inserta un carácter nuevo en un búfer lleno. |
pbackfail | La función miembro virtual protegida trata de colocar un elemento en el búfer de entrada y, después, convertirlo en el elemento actual (indicado por el siguiente puntero). |
seekoff | La función miembro virtual protegida trata de modificar las posiciones actuales de las secuencias controladas. |
seekpos | La función miembro virtual protegida trata de modificar las posiciones actuales de las secuencias controladas. |
str | Establece u obtiene el texto en un búfer de cadena sin cambiar la posición de escritura. |
swap | |
underflow | Función miembro virtual protegida que extrae el elemento actual de la secuencia de entrada. |
Requisitos
Encabezado:<sstream>
Espacio de nombres: std
basic_stringbuf::allocator_type
El tipo es un sinónimo del parámetro de plantilla Alloc.
typedef Alloc allocator_type;
basic_stringbuf::basic_stringbuf
Construye un objeto de tipo basic_stringbuf
.
basic_stringbuf(
ios_base::openmode _Mode = ios_base::in | ios_base::out);
basic_stringbuf(
const basic_string<Elem, Tr, Alloc>& str,
ios_base::openmode _Mode = ios_base::in | ios_base::out);
Parámetros
_Mode
Una de las enumeraciones de ios_base::openmode.
str
Un objeto de tipo basic_string.
Comentarios
El primer constructor almacena un puntero nulo en todos los punteros que controlan el búfer de entrada y el de salida. Para obtener más información, vea la sección Comentarios del tema basic_streambuf (Clase). También almacena _Mode como el modo stringbuf. Para obtener más información, vea la sección Comentarios del tema basic_stringbuf (Clase).
El segundo constructor asigna una copia de la secuencia controlada por el objeto de cadena str. Si _Mode & ios_base::in
es distinto de cero, establece el búfer de entrada para que comience a leer al inicio de la secuencia. Si _Mode & ios_base::out
es distinto de cero, establece el búfer de salida para que comience a escribir al inicio de la secuencia. También almacena _Mode como el modo stringbuf. Para obtener más información, vea la sección Comentarios del tema basic_stringbuf (Clase).
basic_stringbuf::char_type
Asocia un nombre de tipo al parámetro de plantilla Elem.
typedef Elem char_type;
basic_stringbuf::int_type
Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr
.
typedef typename traits_type::int_type int_type;
basic_stringbuf::off_type
Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr
.
typedef typename traits_type::off_type off_type;
basic_stringbuf::overflow
Función virtual protegida a la que se puede llamar cuando se inserta un carácter nuevo en un búfer lleno.
virtual int_type overflow(int_type _Meta = traits_type::eof());
Parámetros
_Meta
El carácter que se va a insertar en el búfer o traits_type::eof
.
Valor devuelto
Si la función no se puede ejecutar correctamente, devuelve traits_type::eof
. De lo contrario, devuelve traits_type::not_eof(_ Meta).
Comentarios
Si _Meta no es igual a traits_type::eof, la función miembro virtual protegida intenta insertar el elemento traits_type::to_char_type(_Meta) en el búfer de salida. Puede hacerlo de varias maneras:
Si está disponible una posición de escritura, puede almacenar el elemento en la posición de escritura e incrementar el puntero siguiente para el búfer de salida.
Puede proporcionar una posición de escritura al asignar almacenamiento nuevo o adicional para el búfer de salida. Extender el búfer de salida de esta forma también extiende cualquier búfer de entrada asociado.
basic_stringbuf::p backfail
La función miembro virtual protegida intenta devolver un elemento al búfer de entrada y, después, convertirlo en el elemento actual (indicado por el siguiente puntero).
virtual int_type pbackfail(int_type _Meta = traits_type::eof());
Parámetros
_Meta
El carácter que se va a insertar en el búfer o traits_type::eof
.
Valor devuelto
Si la función no se puede ejecutar correctamente, devuelve traits_type::eof
. De lo contrario, devuelve traits_type::not_eof(_ Meta).
Comentarios
Si _Meta es igual a traits_type::eof, el elemento que se va a devolver es realmente el que ya está en el flujo por delante del elemento actual. De lo contrario, ese elemento se sustituye por bytes = traits_type::to_char_type(_ Meta). La función puede devolver un elemento de distintas maneras:
Si está disponible una posición de devolución y el elemento almacenado es igual a byte, puede disminuir el puntero siguiente para el búfer de entrada.
Si está disponible una posición de devolución y si el modo de stringbuf permite que la secuencia se modifique (mode & ios_base::out es distinto de cero), puede almacenar byte en la posición de devolución y disminuir el puntero siguiente para el búfer de entrada.
basic_stringbuf::p os_type
Hace que este tipo en el ámbito de basic_filebuf equivalga al tipo con el mismo nombre del ámbito Tr
.
typedef typename traits_type::pos_type pos_type;
basic_stringbuf::seekoff
La función miembro virtual protegida trata de modificar las posiciones actuales de las secuencias controladas.
virtual pos_type seekoff(
off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Mode = ios_base::in | ios_base::out);
Parámetros
_Off
La posición que se va a buscar relativa a _Way. Para obtener más información, vea basic_stringbuf::off_type.
_Way
El punto de partida de las operaciones de desplazamiento. Vea los valores posibles en ios_base::seekdir.
_Mode
Especifica el modo de la posición del puntero. El valor predeterminado es permitirle modificar las posiciones de lectura y escritura. Para obtener más información, vea ios_base::openmode.
Valor devuelto
Devuelve la posición nueva o una posición de flujo no válida.
Comentarios
Para un objeto de la clase basic_stringbuf<Elem, Tr, Alloc>
, una posición de flujo consta solo de un desplazamiento de flujo. El desplazamiento cero designa el primer elemento de la secuencia controlada.
La nueva posición se determina de la siguiente forma:
Si
_Way
==ios_base::beg
, la nueva posición es el principio del flujo más _Off.Si
_Way
==ios_base::cur
, la nueva posición es la posición actual del flujo más _Off.Si
_Way
==ios_base::end
, la nueva posición es el final del flujo más _Off.
Si _Mode & ios_base::in
es distinto de cero, la función modifica la siguiente posición de lectura en el búfer de entrada. Si _Mode & ios_base::out
es distinto de cero, la función modifica la siguiente posición de escritura en el búfer de salida. Para que un flujo se vea afectado, debe existir su búfer. Para que una operación de posicionamiento se realice correctamente, la posición de la secuencia resultante debe encontrarse dentro de la secuencia controlada. Si la función afecta a ambas posiciones del flujo, _Way debe ser ios_base::beg
o ios_base::end
y ambos flujos se colocan en el mismo elemento. En caso contrario (o si no se ve afectada ninguna posición), se produce un error en la operación de posicionamiento.
Si la función modifica correctamente una o las dos posiciones del flujo, devuelve la posición del flujo resultante. De lo contrario, se produce un error y devuelve una posición de flujo no válida.
basic_stringbuf::seekpos
La función miembro virtual protegida trata de modificar las posiciones actuales de las secuencias controladas.
virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Mode = ios_base::in | ios_base::out);
Parámetros
_Sp
La posición que se va a buscar.
_Mode
Especifica el modo de la posición del puntero. El valor predeterminado es permitirle modificar las posiciones de lectura y escritura.
Valor devuelto
Si la función modifica correctamente una o las dos posiciones del flujo, devuelve la posición del flujo resultante. De lo contrario, se produce un error y devuelve una posición de flujo no válida. Para determinar si la posición del flujo no es válida, compare el valor devuelto con pos_type(off_type(-1))
.
Comentarios
Para un objeto de la clase class basic_stringbuf<Elem, Tr, Alloc
>, una posición de flujo consta solo de un desplazamiento de flujo. El desplazamiento cero designa el primer elemento de la secuencia controlada. La nueva posición se determina mediante _ Sp.
Si mode & ios_base::in es distinto de cero, la función modifica la siguiente posición de lectura en el búfer de entrada. Si mode & ios_base::out es distinto de cero, la función modifica la siguiente posición de escritura en el búfer de salida. Para que un flujo se vea afectado, debe existir su búfer. Para que una operación de posicionamiento se realice correctamente, la posición de la secuencia resultante debe encontrarse dentro de la secuencia controlada. En caso contrario (o si no se ve afectada ninguna posición), se produce un error en la operación de posicionamiento.
basic_stringbuf::str
Establece u obtiene el texto en un búfer de cadena sin cambiar la posición de escritura.
basic_string<Elem, Tr, Alloc> str() const;
void str(
const basic_string<Elem, Tr, Alloc>& _Newstr);
Parámetros
_Newstr
La nueva cadena.
Valor devuelto
Devuelve un objeto de clase basic_string<Elem, Tr, Alloc >, cuya secuencia controlada es una copia de la secuencia controlada por *this
.
Comentarios
El primer miembro de la función devuelve un objeto de clase basic_string<Elem, Tr, Alloc
>, cuya secuencia controlada es una copia de la secuencia controlada por *this
. La secuencia copiada depende del modo de stringbuf almacenado:
Si mode & ios_base::out es distinto de cero y existe un búfer de salida, la secuencia es el búfer de salida completo (elementos epptr - pbase que empiezan por
pbase
).Si mode & ios_base::in es distinto de cero y existe un búfer de entrada, la secuencia es el búfer de entrada completo (elementos egptr - eback que empiezan por
eback
).De lo contrario, la secuencia copiada está vacía.
La segunda función miembro desasigna cualquier secuencia controlada actualmente por *this
. Después asigna una copia de la secuencia controlada por _Newstr. Si mode & ios_base::in es distinto de cero, establece el búfer de entrada para que comience a leer al inicio de la secuencia. Si mode & ios_base::out es distinto de cero, establece el búfer de salida para que comience a escribir al inicio de la secuencia.
Ejemplo
// basic_stringbuf_str.cpp
// compile with: /EHsc
#include <iostream>
#include <sstream>
using namespace std;
int main( )
{
basic_string<char> i( "test" );
stringstream ss;
ss.rdbuf( )->str( i );
cout << ss.str( ) << endl;
ss << "z";
cout << ss.str( ) << endl;
ss.rdbuf( )->str( "be" );
cout << ss.str( ) << endl;
}
test
zest
be
basic_stringbuf::traits_type
Asocia un nombre de tipo al parámetro de plantilla Tr.
typedef Tr traits_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla Tr.
basic_stringbuf::underflow
Función virtual protegida que extrae el elemento actual de la secuencia de entrada.
virtual int_type underflow();
Valor devuelto
Si la función no se puede ejecutar correctamente, devuelve traits_type::eof. De lo contrario, devuelve el elemento actual en el flujo de entrada, que está convertido.
Comentarios
La función miembro virtual protegida intenta extraer el elemento actual byte
del búfer de entrada, avanzar la posición del flujo actual y devolver el elemento como traits_type::to_int_type( byte). Solo puede hacerlo de una manera: si está disponible una posición de lectura, toma byte
como el elemento almacenado en la posición de lectura y avanza el puntero siguiente del búfer de entrada.
basic_streambuf::swap
Intercambia el contenido de este búfer de cadena con otro búfer de cadena.
void basic_stringbuf<T>::swap(basic_stringbuf& other)
Parámetros
other
El parámetro basic_stringbuf cuyo contenido se intercambiará con este basic_stringbuf.
Comentarios
basic_stringbuf::operator=
Asigna el contenido del basic_stringbuf del lado derecho del operador al basic_stringbuf del lado izquierdo.
basic_stringbuf& basic_stringbuf:: operator=(const basic_stringbuf& other)
Parámetros
other
Un basic_stringbuf cuyo contenido, incluidas las características de configuración regional, se asignará al stringbuf del lado izquierdo del operador.
Comentarios
Consulte también
Seguridad para subprocesos en la biblioteca estándar de C++
Programación con iostream
Convenciones de iostreams