Bonjour,
les fonctions seekg et seekp des flux standards me posent un problème de LSP : selon l'implémentation du flux, les pointeurs de position put et get sont modifiés indépendamment ou non (par exemple fstream vs stringstream).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 void test_lsp(std::iostream & stream) { using namespace std; stream.seekg(0, iostream::beg); stream.seekp(0, iostream::beg); cout << "seekg(0, beg), seekp(0, beg) \n" << "tellg : " << stream.tellg() << "\ntellp : " << stream.tellp() << "\n\n"; stream.seekg(3, iostream::beg); cout << "seekg(3, beg)\n" << "tellg : " << stream.tellg() << "\ntellp : " << stream.tellp() << "\n\n"; stream.seekg(3, iostream::cur); cout << "seekg(3, cur)\n" << "tellg : " << stream.tellg() << "\ntellp : " << stream.tellp() << "\n\n"; stream.seekp(3, iostream::cur); cout << "seekp(3, cur)\n" << "tellg : " << stream.tellg() << "\ntellp : " << stream.tellp() << "\n\n"; }L'appel de stream.seekg(x, iostream::cur); stream.seekp(x, iostream::cur) pouvant de fait soit décaler les pointeurs de x, soit de 2*x.Envoyé par Console
Quand aux fonctions pubseekoff / seekoff des streambuf, le standard ne leur permet pas de modifier simultanément les deux pointeurs à partir de la position courante.
Existe-il un moyen propre (ou à défaut pas trop sale ) de réaliser cela ?
Partager