| I/O manipulators | ||||
| Print functions(C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++20) | ||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
| Synchronized Output | ||||
(C++20) | ||||
| Types | ||||
| Error category interface | ||||
(C++11) | ||||
(C++11) |
| Public member functions | ||||
(C++11) | ||||
(C++11) | ||||
(C++20) | ||||
| Protected member functions | ||||
basic_stringbuf::seekpos | ||||
| Non-member functions | ||||
(C++11) | ||||
| Exposition-only member functions | ||||
protected: virtual pos_type seekpos( pos_type sp, | ||
Repositionsstd::basic_streambuf::gptr and/orstd::basic_streambuf::pptr, if possible, to the position indicated bysp.
Effectively executesseekoff(off_type(sp),std::ios_base::beg, which).
Contents |
| sp | - | stream position, such as one obtained byseekoff() orseekpos() | ||||||
| which | - | defines whether the input sequences, the output sequence, or both are affected. It can be one or a combination of the following constants:
|
sp on success orpos_type(off_type(-1)) on failure.
seekpos() is called bystd::basic_streambuf::pubseekpos(), which is called by the single-argument versions ofstd::basic_istream::seekg() andstd::basic_ostream::seekp().
#include <sstream>#include <iostream> struct mybuf:std::stringbuf{ mybuf(conststd::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);}
Output:
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.
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 375 | C++98 | static constant members ofstd::ios_base were misspecified as members ofstd::basic_ios | corrected |
| LWG 564 | C++98 | if was unclear how to repositiongptr and/orpptr | they are repositioned byseekoff() |
| invokesseekpos() (public member function of std::basic_streambuf<CharT,Traits>)[edit] | |
[virtual] | repositions the next pointer in the input sequence, output sequence, or both, using relative addressing (virtual protected member function)[edit] |
[virtual] | repositions the file position, using absolute addressing (virtual protected member function of std::basic_filebuf<CharT,Traits>)[edit] |
[virtual] | repositions the next pointer in the input sequence, output sequence, or both using absolute addressing (virtual protected member function of std::strstreambuf)[edit] |