Класс basic_stringbuf
Описывает буфер потока, который управляет передачей элементов типа Elem
, признаки символов которого определяются с помощью класса Tr
, в последовательность элементов, сохраненную в объекте массива, и из нее.
Синтаксис
template <class Elem, class Tr = char_traits<Elem>,
class Alloc = allocator<Elem>>
class basic_stringbuf : public basic_streambuf<Elem, Tr>
Параметры
Alloc
Класс распределителя.
Elem
Тип основного элемента строки.
Tr
Признаки символа, соответствующие основному элементу строки.
Замечания
Объект размещается, расширяется и освобождается при необходимости для обеспечения соответствия изменениям в последовательности.
Объект класса basic_stringbuf<Elem
, Tr
> Alloc
сохраняет копию аргумента ios_base::
openmode из конструктора в режиме stringbuf
режима:
Если
mode & ios_base::in
имеет ненулевое значение, входной буфер доступен. Дополнительные сведения см. в разделе Класс basic_streambuf.Если
mode & ios_base::out
имеет ненулевое значение, выходной буфер доступен.
Конструкторы
Конструктор | Description |
---|---|
basic_stringbuf | Создает объект типа basic_stringbuf . |
Определения типов
Введите имя | Description |
---|---|
allocator_type | Тип является синонимом параметра Alloc шаблона. |
char_type | Связывает имя типа с параметром шаблона Elem. |
int_type | Делает этот тип в basic_filebuf области, эквивалентной типу того же имени в области Tr . |
off_type | Делает этот тип в basic_filebuf области, эквивалентной типу того же имени в области Tr . |
pos_type | Делает этот тип в basic_filebuf области, эквивалентной типу того же имени в области Tr . |
traits_type | Связывает имя типа с параметром шаблона Tr. |
Функции элементов
Функция-член | Description |
---|---|
overflow | Защищенная виртуальная функция, которая может вызываться при вставке нового символа в полный буфер. |
pbackfail | Защищенная виртуальная функция-член пытается поместить элемент обратно во входной буфер, затем делает его текущим (на него указывает следующий указатель). |
seekoff | Защищенная виртуальная функция-член пытается изменить текущие положения управляемых потоков. |
seekpos | Защищенная виртуальная функция-член пытается изменить текущие положения управляемых потоков. |
str | Задает или получает текст в буфере строк без изменения позиции записи. |
swap | |
underflow | Защищенная виртуальная функция-член для извлечения текущего элемента из входного потока. |
Требования
Заголовок:<sstream>
Пространство имен: std
basic_stringbuf::allocator_type
Тип является синонимом параметра Alloc шаблона.
typedef Alloc allocator_type;
basic_stringbuf::basic_stringbuf
Создает объект типа 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);
Параметры
_Режим
Одно из перечислений в ios_base::openmode.
str
Объект типа basic_string.
Замечания
Первый конструктор сохраняет пустой указатель во всех указателях, управляющих входным и выходным буферами. Дополнительные сведения см. в разделе "Примечания" для класса basic_streambuf. Он также сохраняет _Mode в режиме stringbuf. Дополнительные сведения см. в разделе "Примечания" для класса basic_stringbuf.
Второй конструктор выделяет копию последовательности, управляемой строковым объектом str. Если _Mode & ios_base::in
имеет ненулевое значение, то он задает входной буфер для чтения в начале последовательности. Если _Mode & ios_base::out
имеет ненулевое значение, то он задает выходной буфер для записи в начале последовательности. Он также сохраняет _Mode в режиме stringbuf. Дополнительные сведения см. в разделе "Примечания" для класса basic_stringbuf.
basic_stringbuf::char_type
Связывает имя типа с параметром шаблона Elem.
typedef Elem char_type;
basic_stringbuf::int_type
Делает этот тип в области basic_filebuf эквивалентным типу того же имени в Tr
области.
typedef typename traits_type::int_type int_type;
basic_stringbuf::off_type
Делает этот тип в области basic_filebuf эквивалентным типу того же имени в Tr
области.
typedef typename traits_type::off_type off_type;
basic_stringbuf::переполнение
Защищенная виртуальная функция, которая может вызываться при вставке нового символа в полный буфер.
virtual int_type overflow(int_type _Meta = traits_type::eof());
Параметры
_Мета
Символ для вставки в буфер или traits_type::eof
.
Возвращаемое значение
Если функция не может завершиться успешно, она возвращается traits_type::eof
. В противном случае она возвращает traits_type::not_eof(_ Meta).
Замечания
Если _Meta не сравнивается с traits_type::eof, функция защищенного виртуального члена пытается вставить элемент traits_type::to_char_type(_Meta) в выходной буфер. Для этого существует несколько способов.
Если позиция записи доступна, можно сохранить элемент в позиции записи и увеличить следующий указатель для выходного буфера.
Можно сделать позицию записи доступной, выделяя новое или дополнительное хранилище для выходного буфера. Расширение выходного буфера таким способом также расширяет любой связанный входной буфер.
basic_stringbuf::p backfail
Защищенная виртуальная функция-член пытается поместить элемент обратно во входной буфер, а затем делает его текущим (на него указывает следующий указатель).
virtual int_type pbackfail(int_type _Meta = traits_type::eof());
Параметры
_Мета
Символ для вставки в буфер или traits_type::eof
.
Возвращаемое значение
Если функция не может завершиться успешно, она возвращается traits_type::eof
. В противном случае она возвращает traits_type::not_eof(_ Meta).
Замечания
Если _Meta сравнивается с traits_type::eof, элемент для отката фактически является тем, который уже находится в потоке до текущего элемента. В противном случае этот элемент заменяется на byte = traits_type::to_char_type(_ Meta). Функция может передать элемент обратно различными способами.
Если позиция возврата доступна и сохраненный там элемент оценивается как равный byte, функция может уменьшить следующий указатель для входного буфера.
Если позиция возврата доступна и режим stringbuf позволяет изменять последовательность (mode & ios_base::out не равно нулю), то функция может сохранить byte в позиции возврата и уменьшить следующий указатель для входного буфера.
basic_stringbuf::p os_type
Делает этот тип в области basic_filebuf эквивалентным типу того же имени в Tr
области.
typedef typename traits_type::pos_type pos_type;
basic_stringbuf::seekoff
Защищенная виртуальная функция-член пытается изменить текущие положения управляемых потоков.
virtual pos_type seekoff(
off_type _Off,
ios_base::seekdir _Way,
ios_base::openmode _Mode = ios_base::in | ios_base::out);
Параметры
_От
Позиция, требуемая относительно _Way. Дополнительные сведения см. в разделе basic_stringbuf::off_type.
_Способ
Начальная точка для операций смещения. Возможные значения см. в разделе ios_base::seekdir.
_Режим
Задает режим для положения указателя. По умолчанию разрешается изменять позиции чтения и записи. Дополнительные сведения см. в разделе ios_base::openmode.
Возвращаемое значение
Возвращает новую позицию или недопустимую позицию потока.
Замечания
Для объекта класса basic_stringbuf<Elem, Tr, Alloc>
позиция потока состоит исключительно из смещения потока. Нулевое смещение обозначает первый элемент управляемой последовательности.
Новая позиция определяется следующим образом.
Если
_Way
==ios_base::beg
новая позиция — начало потока плюс _Off.Если
_Way
==ios_base::cur
новая позиция — текущая позиция потока плюс _Off.Если
_Way
==ios_base::end
новая позиция — конец потока плюс _Off.
Если _Mode & ios_base::in
имеет ненулевое значение, функция изменяет следующую позицию для чтения во входном буфере. Если _Mode & ios_base::out
имеет ненулевое значение, функция изменяет следующую позицию для записи в выходном буфере. Для затрагиваемого потока должен существовать свой буфер. Для успешного выполнения операции размещения итоговая позиция потока должна находиться в управляемой последовательности. Если функция влияет на обе позиции потока, _Way должны быть ios_base::beg
или ios_base::end
оба потока расположены в одном элементе. В противном случае (или если не затрагивается ни одна позиция) операция размещения завершится неудачно.
Если функция успешно изменила одну или обе позиции потока, то она возвращает итоговую позицию потока. В противном случае она завершается неудачно и возвращает недопустимую позицию потока.
basic_stringbuf::seekpos
Защищенная виртуальная функция-член пытается изменить текущие положения управляемых потоков.
virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Mode = ios_base::in | ios_base::out);
Параметры
_Sp
Позиция для поиска.
_Режим
Задает режим для положения указателя. По умолчанию разрешается изменять позиции чтения и записи.
Возвращаемое значение
Если функция успешно изменила одну или обе позиции потока, то она возвращает итоговую позицию потока. В противном случае она завершается неудачно и возвращает недопустимую позицию потока. Чтобы определить, является ли позиция потока недопустимой, сравните возвращаемое значение с pos_type(off_type(-1))
.
Замечания
Для объекта класса basic_stringbuf<Elem, Tr, Alloc
>позиция потока состоит исключительно из смещения потока. Нулевое смещение обозначает первый элемент управляемой последовательности. Новая позиция определяется объектом _ Sp.
Если mode & ios_base::in имеет ненулевое значение, функция изменяет следующую позицию для чтения во входном буфере. Если mode & ios_base::out имеет ненулевое значение, функция изменяет следующую позицию для записи в выходном буфере. Для затрагиваемого потока должен существовать свой буфер. Для успешного выполнения операции размещения итоговая позиция потока должна находиться в управляемой последовательности. В противном случае (или если не затрагивается ни одна позиция) операция размещения завершится неудачно.
basic_stringbuf::str
Задает или получает текст в буфере строк без изменения позиции записи.
basic_string<Elem, Tr, Alloc> str() const;
void str(
const basic_string<Elem, Tr, Alloc>& _Newstr);
Параметры
_Newstr
Новая строка.
Возвращаемое значение
Возвращает объект класса basic_string<Elem, Tr, Alloc>, чей контролируемый последовательности является копией управляемой последовательности, управляемой.*this
Замечания
Первая функция-член возвращает объект класса basic_string<Elem, Tr, Alloc
>контролируемый последовательностью которого является копия управляемой последовательности *this
. Скопированная последовательность зависит от сохраненного режима stringbuf:
если mode & ios_base::out имеет ненулевое значение и существует выходной буфер, последовательность представляет собой весь выходной буфер (элементы epptr - pbase, начиная с
pbase
);если mode & ios_base::in имеет ненулевое значение и существует входной буфер, последовательность представляет собой весь входной буфер (элементы egptr - eback, начиная с
eback
).В противном случае скопированная последовательность пуста.
Вторая функция-член освобождает любую последовательность, контролируемую в *this
данный момент. Затем он выделяет копию последовательности, управляемой _Newstr. Если mode & ios_base::in имеет ненулевое значение, то она задает входной буфер для чтения в начале последовательности. Если mode & ios_base::out имеет ненулевое значение, то она задает выходной буфер для записи в начале последовательности.
Пример
// 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
Связывает имя типа с параметром шаблона Tr.
typedef Tr traits_type;
Замечания
Этот тип является синонимом для параметра-шаблона Tr.
basic_stringbuf::underflow
Защищенная виртуальная функция для извлечения текущего элемента из входного потока.
virtual int_type underflow();
Возвращаемое значение
Если функция не может завершиться успешно, она возвращает traits_type::eof. В противном случае он возвращает текущий элемент во входном потоке, который преобразуется.
Замечания
Защищенная виртуальная функция-член пытается извлечь текущий элемент byte
из входного буфера, перейти к текущей позиции потока и вернуть элемент как traits_type::to_int_type( байт). Это можно сделать одним из способов: если доступно положение чтения, он принимает byte
в качестве элемента, хранящегося в позиции чтения, и перемещает следующий указатель для входного буфера.
basic_streambuf::swap
Меняет местами содержимое данного буфера строк и другого буфера строк.
void basic_stringbuf<T>::swap(basic_stringbuf& other)
Параметры
other
Буфер basic_stringbuf, содержимое которого будет заменено содержимым этого буфера basic_stringbuf.
Замечания
basic_stringbuf::operator=
Назначает содержимое basic_stringbuf справа от оператора функции basic_stringbuf слева.
basic_stringbuf& basic_stringbuf:: operator=(const basic_stringbuf& other)
Параметры
other
basic_stringbuf, содержимое которого, включая признаки языкового стандарта, будут назначены функции stringbuf слева от оператора.
Замечания
См. также
Потокобезопасность в стандартной библиотеке C++
Программирование iostream
Соглашения iostreams