Classe basic_stringbuf
Descrive un buffer del flusso che controlla la trasmissione di elementi di tipo Elem
, i cui tratti di carattere sono determinati dalla classe Tr
, verso e da una sequenza di elementi archiviati in un oggetto matrice.
Sintassi
template <class Elem, class Tr = char_traits<Elem>,
class Alloc = allocator<Elem>>
class basic_stringbuf : public basic_streambuf<Elem, Tr>
Parametri
Alloc
Classe Allocator.
Elem
Tipo di elemento di base della stringa.
Tr
Tratti di carattere specializzati sull'elemento di base della stringa.
Osservazioni:
L'oggetto viene allocato, esteso e liberato come necessario per supportare le modifiche nella sequenza.
Un oggetto della classe basic_stringbuf<Elem
, Tr
, Alloc
> archivia una copia dell'argomento ios_base::
openmode dal costruttore come stringbuf
modalità:
Se
mode & ios_base::in
è diverso da zero, il buffer di input è accessibile. Per altre informazioni, vedere Classe basic_streambuf.Se
mode & ios_base::out
è diverso da zero, il buffer di output è accessibile.
Costruttori
Costruttore | Descrizione |
---|---|
basic_stringbuf | Costruisce un oggetto di tipo basic_stringbuf . |
Typedef
Nome tipo | Descrizione |
---|---|
allocator_type | Il tipo è un sinonimo del parametro modello Alloc. |
char_type | Associa un nome di tipo al parametro di modello Elem. |
int_type | Rende questo tipo all'interno dell'ambito basic_filebuf equivalente al tipo dello stesso nome nell'ambito Tr . |
off_type | Rende questo tipo all'interno dell'ambito basic_filebuf equivalente al tipo dello stesso nome nell'ambito Tr . |
pos_type | Rende questo tipo all'interno dell'ambito basic_filebuf equivalente al tipo dello stesso nome nell'ambito Tr . |
traits_type | Associa un nome di tipo al parametro di modello Tr. |
Funzioni membro
Funzione membro | Descrizione |
---|---|
overflow | Una funzione virtuale protetta che può essere chiamata quando viene inserito un nuovo carattere in un buffer pieno. |
pbackfail | La funzione membro virtuale protetta prova a usare un elemento in un buffer di input, quindi renderlo l'elemento corrente (a cui punta il puntatore successivo). |
seekoff | La funzione membro virtuale protetta prova a modificare le posizioni correnti per i flussi di controllati. |
seekpos | La funzione membro virtuale protetta prova a modificare le posizioni correnti per i flussi di controllati. |
str | Imposta o recupera il testo in un buffer di stringa senza modificare la posizione di scrittura. |
scambio | |
underflow | La funzione membro virtuale protetta per estrarre l'elemento corrente dal flusso di input. |
Requisiti
Header:<sstream>
Spazio dei nomi: std
basic_stringbuf::allocator_type
Il tipo è un sinonimo del parametro modello Alloc.
typedef Alloc allocator_type;
basic_stringbuf::basic_stringbuf
Costruisce un oggetto di 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);
Parametri
_Modo
Una delle enumerazioni in ios_base::openmode.
str
Un oggetto di tipo basic_string.
Osservazioni:
Il primo costruttore archivia un puntatore null in tutti i puntatori che controllano il buffer di input e il buffer di output. Per altre informazioni, vedere la sezione Note della Classe basic_streambuf. Archivia anche _Mode come modalità stringabuf. Per altre informazioni, vedere la sezione Note della Classe basic_stringbuf.
Il secondo costruttore alloca una copia della sequenza controllata dall'oggetto stringa str. Se _Mode & ios_base::in
è diverso da zero, imposta il buffer di input per iniziare la lettura all'inizio della sequenza. Se _Mode & ios_base::out
è diverso da zero, imposta il buffer di output per iniziare la scrittura all'inizio della sequenza. Archivia anche _Mode come modalità stringabuf. Per altre informazioni, vedere la sezione Note della Classe basic_stringbuf.
basic_stringbuf::char_type
Associa un nome di tipo al parametro di modello Elem.
typedef Elem char_type;
basic_stringbuf::int_type
Rende questo tipo all'interno dell'ambito di basic_filebuf equivalente al tipo dello stesso nome nell'ambito Tr
.
typedef typename traits_type::int_type int_type;
basic_stringbuf::off_type
Rende questo tipo all'interno dell'ambito di basic_filebuf equivalente al tipo dello stesso nome nell'ambito Tr
.
typedef typename traits_type::off_type off_type;
basic_stringbuf::overflow
Una funzione virtuale protetta che può essere chiamata quando viene inserito un nuovo carattere in un buffer pieno.
virtual int_type overflow(int_type _Meta = traits_type::eof());
Parametri
_Meta
Carattere da inserire nel buffer o traits_type::eof
.
Valore restituito
Se la funzione non riesce, restituisce traits_type::eof
. In caso contrario, restituisce traits_type::not_eof(_ Meta).
Osservazioni:
Se _Meta non è uguale a traits_type::eof, la funzione membro virtuale protetta tenta di inserire l'elemento traits_type::to_char_type(_Meta) nel buffer di output. Questa operazione può essere eseguita in vari modi:
Se è disponibile una posizione di scrittura, può archiviare l'elemento in tale posizione e incrementare il puntatore successivo per il buffer di output.
Una posizione di scrittura può essere resa disponibile allocando spazio di archiviazione nuovo o aggiuntivo per il buffer di output. Questa estensione del buffer di output estende anche eventuali buffer di input associati.
basic_stringbuf::p backfail
La funzione membro virtuale protetta prova a reinserire un elemento nel buffer di input e quindi di renderlo l'elemento corrente a cui punta il puntatore successivo.
virtual int_type pbackfail(int_type _Meta = traits_type::eof());
Parametri
_Meta
Carattere da inserire nel buffer o traits_type::eof
.
Valore restituito
Se la funzione non riesce, restituisce traits_type::eof
. In caso contrario, restituisce traits_type::not_eof(_ Meta).
Osservazioni:
Se _Meta confronta uguale a traits_type::eof, l'elemento di cui eseguire il pushback è effettivamente quello già presente nel flusso prima dell'elemento corrente. In caso contrario, l'elemento viene sostituito da byte = traits_type::to_char_type(_ Meta). La funzione può reinserire un elemento in vari modi:
Se è disponibile una posizione di reinserimento e l'elemento archiviato in tale posizione risulta uguale a byte, può decrementare il puntatore successivo per il buffer di input.
Se è disponibile una posizione di reinserimento e la modalità stringbuf consente di modificare la sequenza ( mode & ios_base::out è diverso da zero), la funzione può archiviare byte nella posizione di reinserimento e decrementare il puntatore successivo per il buffer di input.
basic_stringbuf::p os_type
Rende questo tipo all'interno dell'ambito di basic_filebuf equivalente al tipo dello stesso nome nell'ambito Tr
.
typedef typename traits_type::pos_type pos_type;
basic_stringbuf::seekoff
La funzione membro virtuale protetta prova a modificare le posizioni correnti per i flussi di controllati.
virtual pos_type seekoff(
off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Mode = ios_base::in | ios_base::out);
Parametri
_Spento
Posizione da cercare rispetto a _Way. Per altre informazioni, vedere basic_stringbuf::off_type.
_Maniera
Punto iniziale per le operazioni di offset. Per i valori possibili, vedere ios_base::seekdir.
_Modo
Specifica la modalità per la posizione del puntatore. L'impostazione predefinita consente di modificare le posizioni di lettura e scrittura. Per altre informazioni, vedere ios_base::openmode.
Valore restituito
Restituisce la nuova posizione o una posizione di flusso non valida.
Osservazioni:
Per un oggetto della classe basic_stringbuf<Elem, Tr, Alloc>
, una posizione del flusso è costituita essenzialmente da un offset del flusso. L'offset zero designa il primo elemento della sequenza controllata.
La nuova posizione è determinata nel modo seguente:
Se
_Way
==ios_base::beg
, la nuova posizione è l'inizio del flusso più _Off.Se
_Way
==ios_base::cur
, la nuova posizione è la posizione corrente del flusso più _Off.Se
_Way
==ios_base::end
, la nuova posizione è la fine del flusso più _Off.
Se _Mode & ios_base::in
è diverso da zero, la funzione modifica la successiva posizione da leggere nel buffer di input. Se _Mode & ios_base::out
è diverso da zero, la funzione modifica la successiva posizione da scrivere nel buffer di output. Affinché un flusso ne venga interessato, è necessario che esista il relativo buffer. Affinché un'operazione di posizionamento abbia esito positivo, è necessario che la risultante posizione del flusso si trovi all'interno della sequenza controllata. Se la funzione influisce su entrambe le posizioni del flusso, _Way deve essere ios_base::beg
o ios_base::end
e entrambi i flussi vengono posizionati nello stesso elemento. In caso contrario, o se nessuna posizione ne è influenzata, l'operazione di posizionamento ha esito negativo.
Se la funzione modifica una o entrambe le posizioni del flusso, restituisce la posizione del flusso risultante. In caso contrario, ha esito negativo e restituisce una posizione del flusso non valida.
basic_stringbuf::seekpos
La funzione membro virtuale protetta prova a modificare le posizioni correnti per i flussi di controllati.
virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Mode = ios_base::in | ios_base::out);
Parametri
_Sp
Posizione da cercare.
_Modo
Specifica la modalità per la posizione del puntatore. L'impostazione predefinita consente di modificare le posizioni di lettura e scrittura.
Valore restituito
Se la funzione modifica una o entrambe le posizioni del flusso, restituisce la posizione del flusso risultante. In caso contrario, ha esito negativo e restituisce una posizione del flusso non valida. Per stabilire se la posizione del flusso non è valida, confrontare il valore restituito con pos_type(off_type(-1))
.
Osservazioni:
Per un oggetto della classe basic_stringbuf<Elem, Tr, Alloc
>, una posizione del flusso è costituita esclusivamente da un offset di flusso. L'offset zero designa il primo elemento della sequenza controllata. La nuova posizione è determinata da _ Sp.
Se mode & ios_base::in è diverso da zero, la funzione modifica la posizione successiva da leggere nel buffer di input. Se mode & ios_base::out è diverso da zero, la funzione modifica la posizione successiva da scrivere nel buffer di output. Affinché un flusso ne venga interessato, è necessario che esista il relativo buffer. Affinché un'operazione di posizionamento abbia esito positivo, è necessario che la risultante posizione del flusso si trovi all'interno della sequenza controllata. In caso contrario, o se nessuna posizione ne è influenzata, l'operazione di posizionamento ha esito negativo.
basic_stringbuf::str
Imposta o recupera il testo in un buffer di stringa senza modificare la posizione di scrittura.
basic_string<Elem, Tr, Alloc> str() const;
void str(
const basic_string<Elem, Tr, Alloc>& _Newstr);
Parametri
_Newstr
La nuova stringa.
Valore restituito
Restituisce un oggetto della classe basic_string<Elem, Tr, Alloc> , la cui sequenza controllata è una copia della sequenza controllata da .*this
Osservazioni:
La prima funzione membro restituisce un oggetto della classe basic_string<Elem, Tr, Alloc
>, la cui sequenza controllata è una copia della sequenza controllata da *this
. La sequenza copiata dipende dalla modalità stringbuf archiviata:
Se mode & ios_base::out è diverso da zero ed esiste un buffer di output, la sequenza corrisponde all'intero buffer di output (elementi epptr - pbase che iniziano con
pbase
).Se mode & ios_base::in è diverso da zero ed esiste un buffer di input, la sequenza corrisponde all'intero buffer di input (elementi egptr - eback che iniziano con
eback
).In caso contrario, la sequenza copiata è vuota.
La seconda funzione membro dealloca qualsiasi sequenza attualmente controllata da *this
. Alloca quindi una copia della sequenza controllata da _Newstr. Se mode & ios_base::in è diverso da zero, imposta il buffer di input per iniziare la lettura all'inizio della sequenza. Se mode & ios_base::out è diverso da zero, imposta il buffer di output per iniziare la scrittura all'inizio della sequenza.
Esempio
// 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
Associa un nome di tipo al parametro di modello Tr.
typedef Tr traits_type;
Osservazioni:
Il tipo è un sinonimo del parametro di modello Tr.
basic_stringbuf::underflow
Funzione virtuale protetta per estrarre l'elemento corrente dal flusso di input.
virtual int_type underflow();
Valore restituito
Se la funzione non riesce, restituisce traits_type::eof. In caso contrario, restituisce l'elemento corrente nel flusso di input, che viene convertito.
Osservazioni:
La funzione membro virtuale protetta tenta di estrarre l'elemento byte
corrente dal buffer di input, avanzare la posizione corrente del flusso e restituire l'elemento come traits_type::to_int_type( byte). Questa operazione può essere eseguita in un unico modo: se è disponibile una posizione di lettura, accetta byte
come elemento archiviato nella posizione di lettura e avanza il puntatore successivo per il buffer di input.
basic_streambuf::swap
Scambia il contenuto di questo buffer di stringa con un altro buffer di stringa.
void basic_stringbuf<T>::swap(basic_stringbuf& other)
Parametri
other
basic_stringbuf il cui contenuto verrà scambiato con quello di questo elemento basic_stringbuf.
Osservazioni:
basic_stringbuf::operator=
Assegna il contenuto di basic_stringbuf sul lato destro dell'operatore a basic_stringbuf sul lato sinistro.
basic_stringbuf& basic_stringbuf:: operator=(const basic_stringbuf& other)
Parametri
other
Elemento basic_stringbuf il cui contenuto, inclusi i tratti delle impostazioni locali, verrà assegnato all'elemento stringbuf sul lato sinistro dell'operatore.
Osservazioni:
Vedi anche
Thread Safety in the C++ Standard Library (Sicurezza dei thread nella libreria standard C++)
Programmazione iostream
iostreams Conventions (Convenzioni di iostream)