std::basic_stringbuf<CharT,Traits,Allocator>::seekpos
protected:
virtual pos_type seekpos( pos_type sp,
std::ios_base::openmode which = std::ios_base::in | std::ios_base::out );
|
Перемещает указатель std::basic_streambuf::gptr и/или std::basic_streambuf::pptr, если возможно, в позицию, указанную sp.
Эквивалентно выполнению seekoff(off_type(sp), std::ios_base::beg, which).
Параметры
| sp | - | позиция потока, например, полученная с помощью seekoff() или seekpos() |
||||||
| which | - | определяет, какие последовательности (входные, выходные или оба) будут затронуты. Может быть одним или комбинацией следующих констант:
|
Возвращаемое значение
sp при успехе или pos_type(off_type(-1)) при ошибке.
Примечания
seekpos() вызывается std::basic_streambuf::pubseekpos(), которое, в свою очередь, вызывается одноаргументными версиями std::basic_istream::seekg() и std::basic_ostream::seekp().
Пример
#include <sstream>
#include <iostream>
struct mybuf : std::stringbuf
{
mybuf(const std::string& str) : std::stringbuf(str) {}
pos_type seekpos(pos_type sp, std::ios_base::openmode which)
{
std::cout << "Before seekpos(" << sp << "), size of the get area is "
<< egptr() - eback() << " with "
<< egptr() - gptr() << " read positions available.\n";
pos_type rc = std::stringbuf::seekpos(sp, which);
std::cout << "seekpos() returns " << rc << ".\nAfter the call, "
<< "size of the get area is "
<< egptr() - eback() << " with "
<< egptr() - gptr() << " read positions available.\n";
return rc;
}
};
int main()
{
mybuf buf("12345");
std::iostream stream(&buf);
stream.seekg(2);
}Вывод:
Before seekpos(2), size of the get area is 5 with 5 read positions available. seekpos() returns 2. After the call, size of the get area is 5 with 3 read positions available.
Отчеты об ошибках
Следующие отчеты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, опубликованное ранее | Корректное поведение |
|---|---|---|---|
| LWG 375 | C++98 | статические константные члены std::ios_base былинеправильно указаны как члены std::basic_ios |
исправлено |
| LWG 564 | C++98 | неясно, как переместить gptr и/или pptr |
они перемещаются с помощью seekoff() |
См. также
вызывает seekpos() (публичный член-функция std::basic_streambuf<CharT,Traits>) |
|
|
[virtual]
|
перемещает указатель на следующий элемент в входной последовательности, выходной последовательности или обоих, используя относительную адресацию (виртуальная защищённая функция-член) |
|
[virtual]
|
перемещает позицию файла, используя абсолютную адресацию (виртуальная защищённая функция-член std::basic_filebuf<CharT,Traits>) |
|
[virtual]
|
перемещает указатель на следующий элемент в входной последовательности, выходной последовательности или обоих, используя абсолютную адресацию (виртуальная защищённая функция-член std::strstreambuf) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_stringbuf/seekpos