J'ai un peu de mal avec l'utilisation des stringstream, je cherche à
reinitialiser un stringstream, dans le sens où je veux vider le tampon,
qu'il ne contienne plus rien, comme lors de sa création.
je pensais que soit clear() soit flush() me débarrasserait du "chaine 1."
que je retrouve dans le deuxième appel à str().
A quoi servent-ils alors ? Comment faire ?
|> Pur réinitialiser le streambuf dans stringstream, il faut |> utiliser stringstream::str(std::string str).
Ce qui ne réinitialise pas le stringstream. Du tout. Il ne réinitialise que le buffer, mais stringstream a beaucoup plus de contexte que ça.
Dans le cas général, une réinitialisation est impossible, parce qu'on n'a aucun moyen de savoir toute la contexte.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Jorge Rivera <jorgeri@rochester.rr.com> writes:
|> Pur réinitialiser le streambuf dans stringstream, il faut
|> utiliser stringstream::str(std::string str).
Ce qui ne réinitialise pas le stringstream. Du tout. Il ne
réinitialise que le buffer, mais stringstream a beaucoup plus de
contexte que ça.
Dans le cas général, une réinitialisation est impossible, parce
qu'on n'a aucun moyen de savoir toute la contexte.
--
James Kanze mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
|> Pur réinitialiser le streambuf dans stringstream, il faut |> utiliser stringstream::str(std::string str).
Ce qui ne réinitialise pas le stringstream. Du tout. Il ne réinitialise que le buffer, mais stringstream a beaucoup plus de contexte que ça.
Dans le cas général, une réinitialisation est impossible, parce qu'on n'a aucun moyen de savoir toute la contexte.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Samuel Krempp
le Wednesday 31 December 2003 12:03, écrivit :
|> soit tu recrées un stringstream, soit tu le réinitialises comme ceci : |> teststr.str("");
Ce qui ne le réinitialise que partiellement. Il faudrait aussi remettre à zéro une erreur éventuelle (voire le eofbit), remettre les flags de formattage à leur état initial, etc.
en fait ça fait juste la partie de réinitialisation dont on voudrait se passer : désallouer et réallouer le buffer interne, alors que ça garde ce qu'on voudrait peut être éviter : les options de formatage.
dong en gros aucun interêt à appeler str("") ..
si on veut juste repositionner les pointeurs du buffer sans rien re-allouer, il faut faire son propre streambuffer (et le mettre dans son propre stream). En dérivant std::stringbuf en gros parasite ça prend juste une 30aine de lignes de code.. (d'ailleurs j'ai posté un code pour ça ya qques mois. en cherchant sur google groups avec 'stringstream' dans le sujet ça devrait sortir)
vraiment je les trouve mal fagotés ces stringstream. Ils réussissent à être à la fois confus d'utilisation, et dépourvus de toute flexibilité.. et leur spécification dans la norme est completement tordue. -- Sam
le Wednesday 31 December 2003 12:03, kanze@alex.gabi-soft.fr écrivit :
|> soit tu recrées un stringstream, soit tu le réinitialises comme ceci :
|> teststr.str("");
Ce qui ne le réinitialise que partiellement. Il faudrait aussi
remettre à zéro une erreur éventuelle (voire le eofbit),
remettre les flags de formattage à leur état initial, etc.
en fait ça fait juste la partie de réinitialisation dont on voudrait se
passer : désallouer et réallouer le buffer interne, alors que ça garde ce
qu'on voudrait peut être éviter : les options de formatage.
dong en gros aucun interêt à appeler str("") ..
si on veut juste repositionner les pointeurs du buffer sans rien re-allouer,
il faut faire son propre streambuffer (et le mettre dans son propre
stream). En dérivant std::stringbuf en gros parasite ça prend juste une
30aine de lignes de code.. (d'ailleurs j'ai posté un code pour ça ya qques
mois. en cherchant sur google groups avec 'stringstream' dans le sujet ça
devrait sortir)
vraiment je les trouve mal fagotés ces stringstream. Ils réussissent à être
à la fois confus d'utilisation, et dépourvus de toute flexibilité..
et leur spécification dans la norme est completement tordue.
--
Sam
|> soit tu recrées un stringstream, soit tu le réinitialises comme ceci : |> teststr.str("");
Ce qui ne le réinitialise que partiellement. Il faudrait aussi remettre à zéro une erreur éventuelle (voire le eofbit), remettre les flags de formattage à leur état initial, etc.
en fait ça fait juste la partie de réinitialisation dont on voudrait se passer : désallouer et réallouer le buffer interne, alors que ça garde ce qu'on voudrait peut être éviter : les options de formatage.
dong en gros aucun interêt à appeler str("") ..
si on veut juste repositionner les pointeurs du buffer sans rien re-allouer, il faut faire son propre streambuffer (et le mettre dans son propre stream). En dérivant std::stringbuf en gros parasite ça prend juste une 30aine de lignes de code.. (d'ailleurs j'ai posté un code pour ça ya qques mois. en cherchant sur google groups avec 'stringstream' dans le sujet ça devrait sortir)
vraiment je les trouve mal fagotés ces stringstream. Ils réussissent à être à la fois confus d'utilisation, et dépourvus de toute flexibilité.. et leur spécification dans la norme est completement tordue. -- Sam