Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Encapsulation d'un buffer dans un stream

14 réponses
Avatar
Philippe MESMEUR
Bonjour =E0 tous,

je cherche =E0 encapsuler un buffer dans un ostream afin de pouvoir y
acc=E9der de la mani=E8re suivante:



void TestOutStream(ostream & a_oStream)
{
a_oStream << "HELLO" << endl << "WORLD" << endl;
a_oStream << "FOO\nBAR" << endl;
a_oStream << "\001\002\003" << endl;
cout << "=3D> tellp: " << a_oStream.tellp() << endl;
}

const unsigned int SIZE =3D 32;
char buf[SIZE];

ostream.SetBuffer(buf, SIZE); /// voici ce que j'aimerais arriver =E0
faire
TestOutStream(ostream);

cout << buf << endl;



L'=E9criture dans le ostream (ou classe d=E9riv=E9e, bien entendu)
entrainerait une =E9criture dans le buffer buf. Le d=E9bordement serait
=E9galement g=E9r=E9.

Existe-t-il des classes std faisant ce que je viens de d=E9crire?
Comment dois-je m'y prendre?

Merci beaucoup pour votre aide

Philippe

4 réponses

1 2
Avatar
Fabien LE LEZ
On Wed, 30 Dec 2009 01:12:51 -0800 (PST), Philippe MESMEUR
:

je cherche à encapsuler un buffer dans un ostream



Je peux me gourer, mais... est-ce que std::strstream ne ferait pas
exactement ce que tu veux ?
Avatar
Mickaël Wolff
Philippe MESMEUR a écrit :
On 30 déc, 16:06, Philippe MESMEUR wrote:



Quelqu'un sait-il comment faire faire l'équivalent de strstream avec
les classes de sstream?




La version standard doit être std::stringstream ?
Au fait, pourquoi utilises-tu un vieil environnement MSVS ?
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
Fabien LE LEZ
On Wed, 30 Dec 2009 08:12:27 -0800 (PST), Philippe MESMEUR
:

Cependant, elle est indiqué comme étant obsolète



Oui et non.

L'idée même d'utiliser un buffer sous la forme d'un char[] est
mauvaise la plupart du temps. Par conséquent, strstream ne sert plus à
grand chose, et est remplacé par stringstream.

Il a été annoncé que strstream est "deprecated", et pourrait être
supprimé d'un prochain standard. Il y a toutefois peu de chances pour
que ça arrive dans un avenir proche.

Par ailleurs, Visual C++ a tendance à balancer des warnings "This
stuff is deprecated". Du coup, il faut systématiquement ajouter
/D_CRT_SECURE_NO_WARNINGS sur la ligne de commande.
Avatar
James Kanze
On Dec 31 2009, 8:26 pm, Fabien LE LEZ wrote:
On Wed, 30 Dec 2009 08:12:27 -0800 (PST), Philippe MESMEUR
:



>Cependant, elle est indiqué comme étant obsolète



Oui et non.



L'idée même d'utiliser un buffer sous la forme d'un char[] est
mauvaise la plupart du temps.



Sauf quand il ne l'est pas. Je m'en sers assez souvent en
sortie, pour formatter des données in situ dans un bloc destiné
à un autre protocol. Quand on travaille à un niveau assez bas,
c'est utile.

Mais évidemment, elle a beaucoup de bagage en trop pour ça. Ça
fait longtemps que j'ai écris mon propre memory_streambuf,
ultra-simplifié.

Par conséquent, strstream ne sert plus à grand chose, et est
remplacé par stringstream.



Il a été annoncé que strstream est "deprecated", et pourrait
être supprimé d'un prochain standard. Il y a toutefois peu de
chances pour que ça arrive dans un avenir proche.



D'autant plus qu'il y a certains qui poussent à elever le
« deprecated ».

Par ailleurs, Visual C++ a tendance à balancer des warnings
"This stuff is deprecated". Du coup, il faut systématiquement
ajouter /D_CRT_SECURE_NO_WARNINGS sur la ligne de commande.



Oui. Mais dans ce cas-ci, g++ a le même problème (avec quelque
chose de différent qu'il faut définir),

--
James Kanze
1 2