Biblioteca C ++ IOS - rdbuf
Descrição
É usado para obter / definir o buffer de fluxo. Se sb for um ponteiro nulo, a função definirá automaticamente os sinalizadores de estado de erro de badbit (que podem lançar uma exceção se as exceções de membro tiverem passado para o badbit).
Algumas classes de fluxo derivadas (como stringstream e fstream) mantêm seu próprio buffer de fluxo interno, ao qual são associadas na construção. Chamar esta função para alterar o buffer de fluxo associado não deve ter efeito sobre o buffer de fluxo interno: o fluxo terá um buffer de fluxo associado que é diferente de seu buffer de fluxo interno (embora as operações de entrada / saída em fluxos sempre usem o buffer de fluxo associado, conforme retornado por esta função de membro).
Declaração
A seguir está a declaração para a função ios :: rdbuf.
get (1) streambuf* rdbuf() const;
set (2) streambuf* rdbuf (streambuf* sb);
A primeira forma (1) retorna um ponteiro para o objeto de buffer de fluxo atualmente associado ao fluxo.
A segunda forma (2) também define o objeto apontado por sb como o buffer de fluxo associado ao fluxo e limpa os sinalizadores de estado de erro.
Parâmetros
sb - Ponteiro para um objeto streambuf.
Valor de retorno
Um ponteiro para o objeto de buffer de fluxo associado ao fluxo antes da chamada.
Exceções
Basic guarantee- se uma exceção for lançada, o fluxo está em um estado válido. Ele lança uma exceção de falha de tipo de membro se sb for um ponteiro nulo e as exceções de membro foram definidas para lançar para badbit.
Corridas de dados
Acessa (1) ou modifica (2) o objeto de fluxo.
O acesso simultâneo ao mesmo objeto de fluxo pode causar disputas de dados.
Exemplo
No exemplo a seguir explica sobre a função ios :: rdbuf.
#include <iostream>
#include <fstream>
int main () {
std::streambuf *psbuf, *backup;
std::ofstream filestr;
filestr.open ("test.txt");
backup = std::cout.rdbuf();
psbuf = filestr.rdbuf();
std::cout.rdbuf(psbuf);
std::cout << "This is written to the file";
std::cout.rdbuf(backup);
filestr.close();
return 0;
}