std::strstreambuf:: seekpos
|
protected
:
virtual
pos_type seekpos
(
pos_type sp,
|
(in C++98 veraltet)
(in C++26 entfernt) |
|
Positioniert std::basic_streambuf::gptr und/oder std::basic_streambuf::pptr , falls möglich, an die durch sp angegebene Position.
Wenn
std::ios_base::in
in
which
gesetzt ist, wird versucht,
gptr()
(den nächsten Zeiger im Lesebereich) neu zu positionieren. Wenn
std::ios_base::out
in
which
gesetzt ist, wird versucht,
pptr()
(den nächsten Zeiger im Schreibbereich) neu zu positionieren. Wenn kein Bit in
which
gesetzt ist, schlägt der Vorgang fehl.
Jeder nächste Zeiger wird wie folgt neu positioniert:
- Wenn der nächste Zeiger null ist, schlägt der Vorgang fehl.
-
Andernfalls wird der neue Offset
newoff
(vom Typ
off_type) durch Aufruf von sp. offset ( ) bestimmt. Wenn newoff negativ ist, außerhalb der Puffergrenzen liegt oder ungültig ist, schlägt der Vorgang fehl. - Andernfalls wird der nächste Zeiger zugewiesen, als ob durch gptr ( ) = eback ( ) + newoff oder pptr ( ) = pbase ( ) + newoff .
Inhaltsverzeichnis |
Parameter
| sp | - |
Stream-Position, wie sie beispielsweise durch
seekoff()
oder
seekpos()
erhalten wird
|
||||||
| which | - |
definiert, ob die Eingabesequenz, die Ausgabesequenz oder beide betroffen sind. Es kann eine oder eine Kombination der folgenden Konstanten sein:
|
Rückgabewert
Der resultierende Offset, bei Erfolg umgewandelt in
pos_type
oder bei Misserfolg in
pos_type
(
off_type
(
-
1
)
)
.
Hinweise
seekpos()
wird aufgerufen von
std::basic_streambuf::pubseekpos()
, welches aufgerufen wird von den Einzelargument-Versionen von
std::basic_istream::seekg()
und
std::basic_ostream::seekp()
.
Beispiel
#include <cstring> #include <iostream> #include <strstream> struct mybuf : std::strstreambuf { mybuf(const char* str) : std::strstreambuf(str, std::strlen(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::strstreambuf::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); }
Ausgabe:
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.
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 55 | C++98 |
seekpos
lieferte eine undefinierte
ungültige Stream-Position bei Fehler |
pos_type
(
off_type
(
-
1
)
)
wird bei Fehler zurückgegeben |
Siehe auch
|
[virtual]
|
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beiden neu, unter Verwendung relativer Adressierung
(virtuelle geschützte Elementfunktion) |
|
[virtual]
|
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beiden neu, unter Verwendung absoluter Adressierung
(virtuelle geschützte Elementfunktion von
std::basic_streambuf<CharT,Traits>
)
|
|
[virtual]
|
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beiden neu, unter Verwendung absoluter Adressierung
(virtuelle geschützte Elementfunktion von
std::basic_stringbuf<CharT,Traits,Allocator>
)
|
|
[virtual]
|
positioniert die Dateiposition neu, unter Verwendung absoluter Adressierung
(virtuelle geschützte Elementfunktion von
std::basic_filebuf<CharT,Traits>
)
|