std::basic_streambuf<CharT,Traits>::pbackfail
protected: virtual int_type pbackfail( int_type c = Traits::eof() ); |
Эту функцию можно вызвать, только если выполнено хотя бы одно из следующих условий:
-
gptr()является нулевым указателем, -
gptr() == eback(), или -
traits::eq(traits::to_char_type(c), gptr()[-1])возвращаетfalse.
Эта функция вызывается открытыми функциями sungetc() и sputbackc() (которые, в свою очередь, вызываются функциями basic_istream::unget и basic_istream::putback), когда:
pbackfail() вызывается без аргументов). В этом случае задача pbackfail() — сместить область извлечения на один символ назад, если связанная последовательность символов это позволяет (например, буфер потока, связанный с файлом, может перезагрузить буфер из файла, начав на один символ раньше). pbackfail() вызывается с символом, который нужно вернуть). В этом случае задача pbackfail() — поместить символ c в область извлечения непосредственно перед basic_streambuf::gptr() и, если возможно, изменить связанную последовательность символов, чтобы отразить это изменение. Это может потребовать смещения области извлечения назад, как в первом случае.Версия этой функции в базовом классе по умолчанию ничего не делает и во всех случаях возвращает Traits::eof(). Эта функция переопределена в производных классах: basic_stringbuf::pbackfail, basic_filebuf::pbackfail, strstreambuf::pbackfail. Предполагается, что она будет переопределена в потоковых классах, определённых пользователем или сторонними библиотеками.
Параметры
| ch | - | символ, который нужно вернуть, или Traits::eof(), если запрашивается только смещение назад |
Возвращаемое значение
Traits::eof() в случае ошибки; любое другое значение указывает на успех. Версия в базовом классе всегда завершается неудачей.
Пример
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение согласно опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 32 | C++98 | условие вызова 'traits::eq(*gptr(),traits::to_char_type(c))возвращает false' не соответствовало описанию sputbackc() | исправлено в соответствии с описанием |
См. также
|
[виртуальная] | смещает входную последовательность назад, чтобы вернуть символ, не затрагивая связанный файл (виртуальная защищённая функция-член std::basic_filebuf<CharT,Traits>) |
|
[виртуальная] | возвращает символ во входную последовательность (виртуальная защищённая функция-член std::basic_stringbuf<CharT,Traits,Allocator>) |
|
[виртуальная] | смещает входную последовательность назад, чтобы вернуть символ (виртуальная защищённая функция-член std::strstreambuf) |
| смещает следующий указатель во входной последовательности на одну позицию назад (открытая функция-член) |
|
| возвращает один символ во входную последовательность (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_streambuf/pbackfail