Classe basic_stringbuf
Descreve um buffer de fluxo que controla a transmissão de elementos do tipo Elem
, cujas características de caractere são determinadas pela classe Tr
, para e de uma sequência de elementos armazenados em um objeto de matriz.
Sintaxe
template <class Elem, class Tr = char_traits<Elem>,
class Alloc = allocator<Elem>>
class basic_stringbuf : public basic_streambuf<Elem, Tr>
Parâmetros
Alloc
A classe do alocador.
Elem
O tipo do elemento básico da cadeia de caracteres.
Tr
As características de caractere especializadas no elemento básico da cadeia de caracteres.
Comentários
O objeto é alocado, estendido e liberado, conforme o necessário, para acomodar as alterações na sequência.
Um objeto da classe basic_stringbuf<Elem
, Tr
, Alloc
> armazena uma cópia do argumento ios_base::
openmode de seu construtor como seu modo stringbuf
mode:
Se
mode & ios_base::in
é diferente de zero, o buffer de entrada está acessível. Para obter mais informações, consulte a Classe basic_streambuf.Se
mode & ios_base::out
é diferente de zero, o buffer de saída está acessível.
Construtores
Construtor | Descrição |
---|---|
basic_stringbuf | Constrói um objeto do tipo basic_stringbuf . |
Typedefs
Nome do tipo | Descrição |
---|---|
allocator_type | O tipo é um sinônimo do parâmetro de modelo Alloc. |
char_type | Associa um nome de tipo ao parâmetro do modelo Elem. |
int_type | Faz com que esse tipo no escopo de basic_filebuf seja equivalente ao tipo com o mesmo nome no escopo Tr. |
off_type | Faz com que esse tipo no escopo de basic_filebuf seja equivalente ao tipo com o mesmo nome no escopo Tr. |
pos_type | Faz com que esse tipo no escopo de basic_filebuf seja equivalente ao tipo com o mesmo nome no escopo Tr. |
traits_type | Associa um nome de tipo ao parâmetro de modelo Tr. |
Funções de membro
Função de membro | Descrição |
---|---|
overflow | Uma função protegida e virtual que pode ser chamada quando um novo caractere é inserido em um buffer cheio. |
pbackfail | A função membro virtual protegida tenta colocar um elemento de volta no buffer de entrada, em seguida, faz com que ele se torne o elemento atual (apontado pelo próximo ponteiro). |
seekoff | A função membro virtual protegida tenta alterar as posições atuais para os fluxos controlados. |
seekpos | A função membro virtual protegida tenta alterar as posições atuais para os fluxos controlados. |
str | Define ou obtém o texto em um buffer de cadeia de caracteres sem alterar a posição de gravação. |
troca | |
underflow | A função membro virtual protegida para extrair o elemento atual do fluxo de entrada. |
Requisitos
Cabeçalho:<sstream>
Namespace: std
basic_stringbuf::allocator_type
O tipo é um sinônimo do parâmetro de modelo Alloc.
typedef Alloc allocator_type;
basic_stringbuf::basic_stringbuf
Constrói um objeto do 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
Uma das enumerações em ios_base::openmode.
str
Um objeto do tipo basic_string.
Comentários
O primeiro construtor armazena um ponteiro nulo em todos os ponteiros que controlam o buffer de entrada e o buffer de saída. Para obter mais informações, consulte a seção Comentários da Classe basic_streambuf. Ele também armazena _Mode como o modo de stringbuf. Para obter mais informações, consulte a seção Comentários da Classe basic_stringbuf.
O segundo construtor aloca uma cópia da sequência controlada pelo objeto de cadeia de caracteres str. Se _Mode & ios_base::in
é diferente de zero, ele define o buffer de entrada para começar a ler no início da sequência. Se _Mode & ios_base::out
é diferente de zero, ele define o buffer de saída para começar a escrever no início da sequência. Ele também armazena _Mode como o modo de stringbuf. Para obter mais informações, consulte a seção Comentários da Classe basic_stringbuf.
basic_stringbuf::char_type
Associa um nome de tipo ao parâmetro do modelo Elem.
typedef Elem char_type;
basic_stringbuf::int_type
Torna esse tipo no escopo de basic_filebuf equivalente ao tipo de mesmo nome no escopo de Tr
.
typedef typename traits_type::int_type int_type;
basic_stringbuf::off_type
Torna esse tipo no escopo de basic_filebuf equivalente ao tipo de mesmo nome no escopo de Tr
.
typedef typename traits_type::off_type off_type;
basic_stringbuf::estouro
Uma função virtual protegida que pode ser chamada quando um novo caractere é inserido em um buffer cheio.
virtual int_type overflow(int_type _Meta = traits_type::eof());
Parâmetros
_Meta
O caractere a ser inserido no buffer ou traits_type::eof
.
Valor de retorno
Se a função não tiver êxito, ela retornará traits_type::eof
. Caso contrário, retornará traits_type::not_eof(_ Meta).
Comentários
Se _Meta não comparar como igual a traits_type::eof, a função membro virtual protegida tentará inserir o elemento traits_type::to_char_type(_Meta) no buffer de saída. Isso pode ser feito de várias maneiras:
Se houver uma posição de gravação disponível, ela poderá armazenar o elemento na posição de gravação e incrementar o próximo ponteiro para o buffer de saída.
Ele pode disponibilizar uma posição de gravação alocando armazenamento novo ou adicional ao buffer de saída. Estender o buffer de saída dessa forma também estende qualquer buffer de entrada associado.
basic_stringbuf::p backfail
A função membro virtual protegida tenta colocar um elemento de volta no buffer de entrada e, em seguida, faz com que ele seja o elemento atual (apontado pelo próximo ponteiro).
virtual int_type pbackfail(int_type _Meta = traits_type::eof());
Parâmetros
_Meta
O caractere a ser inserido no buffer ou traits_type::eof
.
Valor de retorno
Se a função não tiver êxito, ela retornará traits_type::eof
. Caso contrário, retornará traits_type::not_eof(_ Meta).
Comentários
Se _Meta for comparável a traits_type::eofeof, o elemento a ser retornado por push será efetivamente aquele que já estava no fluxo antes do elemento atual. Caso contrário, esse elemento será substituído por byte = traits_type::to_char_type(_ Meta). A função pode colocar um elemento de volta de várias maneiras:
Se uma posição para colocar de volta estiver disponível e o elemento armazenado lá for comparado como igual a byte, ela poderá decrementar o próximo ponteiro para o buffer de entrada.
Se uma posição para colocar de volta estiver disponível e se o modo de stringbuf permitir que a sequência seja alterada (mode & ios_base::out é diferente de zero), ela poderá armazenar byte na posição para colocar de volta e decrementar o próximo ponteiro para o buffer de entrada.
basic_stringbuf::p os_type
Torna esse tipo no escopo de basic_filebuf equivalente ao tipo de mesmo nome no escopo de Tr
.
typedef typename traits_type::pos_type pos_type;
basic_stringbuf::Seekoff
A função membro virtual protegida tenta alterar as posições atuais para os fluxos controlados.
virtual pos_type seekoff(
off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Mode = ios_base::in | ios_base::out);
Parâmetros
_Off
A posição a ser buscada para o relativo a _Way. Para obter mais informações, consulte basic_stringbuf::off_type.
_Way
O ponto de partida para operações de deslocamento. Consulte ios_base::seekdir para obter os valores possíveis.
_Mode
Especifica o modo para a posição do ponteiro. O padrão é permitir que você modifique as posições de leitura e gravação. Para obter mais informações, consulte ios_base::openmode.
Valor de retorno
Retorna a nova posição ou uma posição de fluxo inválida.
Comentários
Para um objeto da classe basic_stringbuf<Elem, Tr, Alloc>
, uma posição de fluxo consiste exclusivamente em um deslocamento de fluxo. O deslocamento zero designa o primeiro elemento da sequência controlada.
A nova posição é determinada da seguinte forma:
Se
_Way
==ios_base::beg
, a nova posição será o início do fluxo mais _Off.Se
_Way
==ios_base::cur
, a nova posição será a posição atual do fluxo mais _ Off.Se
_Way
==ios_base::end
, a nova posição será o final do fluxo mais _Off.
Se _Mode & ios_base::in
é diferente de zero, a função altera a próxima posição a ser lida no buffer de entrada. Se _Mode & ios_base::out
é diferente de zero, a função altera a próxima posição a ser gravada no buffer de saída. Para que um fluxo seja afetado, o buffer deve existir. Para que uma operação de posicionamento seja bem-sucedida, a posição do fluxo resultante deve estar dentro da sequência controlada. Se a função afetar as duas posições de fluxo, _Way deverá ser ios_base::beg
ou ios_base::end
e ambos os fluxos serão posicionados no mesmo elemento. Caso contrário (ou se nenhuma posição for afetada), a operação de posicionamento falhará.
Se a função tiver êxito na alteração de uma ou de ambas as posições de fluxo, ela retornará a posição de fluxo resultante. Caso contrário, ela falhará e retornará uma posição de fluxo inválida.
basic_stringbuf::seekpos
A função membro virtual protegida tenta alterar as posições atuais para os fluxos controlados.
virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Mode = ios_base::in | ios_base::out);
Parâmetros
_Sp
A posição pela qual buscar.
_Mode
Especifica o modo para a posição do ponteiro. O padrão é permitir que você modifique as posições de leitura e gravação.
Valor de retorno
Se a função tiver êxito na alteração de uma ou de ambas as posições de fluxo, ela retornará a posição de fluxo resultante. Caso contrário, ela falhará e retornará uma posição de fluxo inválida. Para determinar se a posição de fluxo é inválida, compare o valor retornado com pos_type(off_type(-1))
.
Comentários
Para um objeto da classe basic_stringbuf<Elem, Tr, Alloc
>, uma posição de fluxo consiste exclusivamente em um deslocamento de fluxo. O deslocamento zero designa o primeiro elemento da sequência controlada. A nova posição é determinada por _ Sp.
Se mode & ios_base::in é diferente de zero, a função altera a próxima posição a ser lida no buffer de entrada. Se mode & ios_base::out é diferente de zero, a função altera a próxima posição a ser gravada no buffer de saída. Para que um fluxo seja afetado, o buffer deve existir. Para que uma operação de posicionamento seja bem-sucedida, a posição do fluxo resultante deve estar dentro da sequência controlada. Caso contrário (ou se nenhuma posição for afetada), a operação de posicionamento falhará.
basic_stringbuf::str
Define ou obtém o texto em um buffer de cadeia de caracteres sem alterar a posição de gravação.
basic_string<Elem, Tr, Alloc> str() const;
void str(
const basic_string<Elem, Tr, Alloc>& _Newstr);
Parâmetros
_Newstr
A nova cadeia de caracteres.
Valor de retorno
Retorna um objeto da classe basic_string<Elem, Tr, Alloc >,, cuja sequência controlada é uma cópia da sequência controlada por *this
.
Comentários
A primeira função membro retorna um objeto da classe basic_string<Elem, Tr, Alloc
>, cuja sequência controlada é uma cópia da sequência controlada por *this
. A sequência copiada depende do modo de stringbuf armazenado:
Se mode & ios_base::out é diferente de zero e existe um buffer de saída, a sequência é o buffer de saída inteiro (elementos epptr - pbase que começam com
pbase
).Se mode & ios_base::in é diferente de zero e existe um buffer de entrada, a sequência é todo o buffer de entrada (elementos egptr - eback que começam com
eback
).Caso contrário, a sequência copiada fica vazia.
A segunda função membro desaloca qualquer sequência controlada atualmente por *this
. Em seguida, aloca uma cópia da sequência controlada por _Newstr. Se mode & ios_base::in é diferente de zero, ela define o buffer de entrada para começar a ler no início da sequência. Se mode & ios_base::out é diferente de zero, ela define o buffer de saída para começar a gravar no início da sequência.
Exemplo
// 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 um nome de tipo ao parâmetro de modelo Tr.
typedef Tr traits_type;
Comentários
O tipo é um sinônimo do parâmetro de modelo Tr.
basic_stringbuf::underflow
Função virtual protegida para extrair o elemento atual do fluxo de entrada.
virtual int_type underflow();
Valor de retorno
Se a função não obtiver êxito, ela retornará traits_type::eof. Caso contrário, ela retornará o elemento atual no fluxo de entrada, que é convertido.
Comentários
A função membro virtual protegida tenta extrair o elemento atual byte
do buffer de entrada, avança a posição de fluxo atual e retorna o elemento como traits_type::to_int_type( byte). A única maneira possível de fazer isso: se houver uma posição de leitura estiver disponível, ela usará byte
como o elemento armazenado na posição leitura e avançará o próximo ponteiro para o buffer de entrada.
basic_streambuf::swap
Troca o conteúdo desse buffer de cadeia de caracteres com outro buffer de cadeia de caracteres.
void basic_stringbuf<T>::swap(basic_stringbuf& other)
Parâmetros
other
O basic_stringbuf cujo conteúdo será trocado com este basic_stringbuf.
Comentários
basic_stringbuf::operador=
Atribui o conteúdo do basic_stringbuf no lado direito do operador para o basic_stringbuf no lado esquerdo.
basic_stringbuf& basic_stringbuf:: operator=(const basic_stringbuf& other)
Parâmetros
other
Um basic_stringbuf cujo conteúdo, incluindo as características de localidade, será atribuído a stringbuf no lado esquerdo do operador.
Comentários
Confira também
Acesso Thread-Safe na Biblioteca Padrão C++
Programação de iostream
Convenções de iostreams