Поделиться через


Класс 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