Michel Michaud wrote:J'imagine qu'on peut trouver plusieurs raisons, mais essaie
simplement de faire la moindre écriture complexe sans...
Contrairement aux autres manipulateurs, celui-là a une
conséquence sur chaque élément écrit.
Justement : Dès que je veux "out-streamer" un vector / list
/ collection quelconque d'objets, je veux typiquement
afficher tous les éléments avec la même largeur : Etre
obligé de réappliquer setw pour chaque élément est à la fois
lourd dans le code et très probablement pénalisant en terme
de performances.
Vous trouverez peut-être votre bonheur dans ces deux librairies:
http://www.boost.org/libs/format/index.html
http://www.boost.org/libs/io/doc/ios_state.html
Michel Michaud wrote:
J'imagine qu'on peut trouver plusieurs raisons, mais essaie
simplement de faire la moindre écriture complexe sans...
Contrairement aux autres manipulateurs, celui-là a une
conséquence sur chaque élément écrit.
Justement : Dès que je veux "out-streamer" un vector / list
/ collection quelconque d'objets, je veux typiquement
afficher tous les éléments avec la même largeur : Etre
obligé de réappliquer setw pour chaque élément est à la fois
lourd dans le code et très probablement pénalisant en terme
de performances.
Vous trouverez peut-être votre bonheur dans ces deux librairies:
http://www.boost.org/libs/format/index.html
http://www.boost.org/libs/io/doc/ios_state.html
Michel Michaud wrote:J'imagine qu'on peut trouver plusieurs raisons, mais essaie
simplement de faire la moindre écriture complexe sans...
Contrairement aux autres manipulateurs, celui-là a une
conséquence sur chaque élément écrit.
Justement : Dès que je veux "out-streamer" un vector / list
/ collection quelconque d'objets, je veux typiquement
afficher tous les éléments avec la même largeur : Etre
obligé de réappliquer setw pour chaque élément est à la fois
lourd dans le code et très probablement pénalisant en terme
de performances.
Vous trouverez peut-être votre bonheur dans ces deux librairies:
http://www.boost.org/libs/format/index.html
http://www.boost.org/libs/io/doc/ios_state.html
Cyrille wrote:Vous trouverez peut-être votre bonheur dans ces deux librairies:
http://www.boost.org/libs/format/index.html
http://www.boost.org/libs/io/doc/ios_state.html
Quel rapport ?
Le seconde n'est qu'une application du concepte RAII à la
restitution de l'état de formattage à son état initial. Chose
que n'importe qui a bien déjà dans sa boîte à outils, depuis dix
ans ou plus. C'est utile, mais il n'aide en rien la gestion du
formattage même. (Dans mon cas, je dois dire que je n'utilise
prèsque plus mon propre IOSave, étant donné que tous mes
manipulateurs réstaure l'état dans leur déstructeur.)
Cyrille wrote:
Vous trouverez peut-être votre bonheur dans ces deux librairies:
http://www.boost.org/libs/format/index.html
http://www.boost.org/libs/io/doc/ios_state.html
Quel rapport ?
Le seconde n'est qu'une application du concepte RAII à la
restitution de l'état de formattage à son état initial. Chose
que n'importe qui a bien déjà dans sa boîte à outils, depuis dix
ans ou plus. C'est utile, mais il n'aide en rien la gestion du
formattage même. (Dans mon cas, je dois dire que je n'utilise
prèsque plus mon propre IOSave, étant donné que tous mes
manipulateurs réstaure l'état dans leur déstructeur.)
Cyrille wrote:Vous trouverez peut-être votre bonheur dans ces deux librairies:
http://www.boost.org/libs/format/index.html
http://www.boost.org/libs/io/doc/ios_state.html
Quel rapport ?
Le seconde n'est qu'une application du concepte RAII à la
restitution de l'état de formattage à son état initial. Chose
que n'importe qui a bien déjà dans sa boîte à outils, depuis dix
ans ou plus. C'est utile, mais il n'aide en rien la gestion du
formattage même. (Dans mon cas, je dois dire que je n'utilise
prèsque plus mon propre IOSave, étant donné que tous mes
manipulateurs réstaure l'état dans leur déstructeur.)
Michel Michaud wrote:Dans le message
,
a écrit
D'où la question suivante : *Pourquoi* avoir fait un cas
particulier pour la largeur????
J'imagine qu'on peut trouver plusieurs raisons, mais essaie
simplement de faire la moindre écriture complexe sans...
Contrairement aux autres manipulateurs, celui-là a une
conséquence sur chaque élément écrit.
Oui, mais c'est un raisonement circulaire. Avec printf, la
précision a bien un effet sur une chaîne de caractères ; si elle
n'en a pas en C++, c'est sans doute parce que, étant persistant,
ça donne des effets perverses.
À l'inverse, suppose que fixed et setprecision ne soient pas
persistants... (bah, ça ne serait pas si mal, si c'était setp
au lieu de setprecision :-)
Et qu'est-ce que ça changerait, s'ils n'était pas persistants ?
Tu précèdes normalement chaque champs par un manipulateur quand
même, qui précise comment le formatter d'une manière sémantique
(c-à-d qu'on dit que ses de l'argent, ou un pourcentage, ou...,
et qu'on définit une fois dans le programme comment l'argent et
les pourcentages doivent être formattés).
Michel Michaud wrote:
Dans le message
1110989445.179450.207630@l41g2000cwc.googlegroups.com,
adebaene@club-internet.fr <adebaene@club-internet.fr> a écrit
D'où la question suivante : *Pourquoi* avoir fait un cas
particulier pour la largeur????
J'imagine qu'on peut trouver plusieurs raisons, mais essaie
simplement de faire la moindre écriture complexe sans...
Contrairement aux autres manipulateurs, celui-là a une
conséquence sur chaque élément écrit.
Oui, mais c'est un raisonement circulaire. Avec printf, la
précision a bien un effet sur une chaîne de caractères ; si elle
n'en a pas en C++, c'est sans doute parce que, étant persistant,
ça donne des effets perverses.
À l'inverse, suppose que fixed et setprecision ne soient pas
persistants... (bah, ça ne serait pas si mal, si c'était setp
au lieu de setprecision :-)
Et qu'est-ce que ça changerait, s'ils n'était pas persistants ?
Tu précèdes normalement chaque champs par un manipulateur quand
même, qui précise comment le formatter d'une manière sémantique
(c-à-d qu'on dit que ses de l'argent, ou un pourcentage, ou...,
et qu'on définit une fois dans le programme comment l'argent et
les pourcentages doivent être formattés).
Michel Michaud wrote:Dans le message
,
a écrit
D'où la question suivante : *Pourquoi* avoir fait un cas
particulier pour la largeur????
J'imagine qu'on peut trouver plusieurs raisons, mais essaie
simplement de faire la moindre écriture complexe sans...
Contrairement aux autres manipulateurs, celui-là a une
conséquence sur chaque élément écrit.
Oui, mais c'est un raisonement circulaire. Avec printf, la
précision a bien un effet sur une chaîne de caractères ; si elle
n'en a pas en C++, c'est sans doute parce que, étant persistant,
ça donne des effets perverses.
À l'inverse, suppose que fixed et setprecision ne soient pas
persistants... (bah, ça ne serait pas si mal, si c'était setp
au lieu de setprecision :-)
Et qu'est-ce que ça changerait, s'ils n'était pas persistants ?
Tu précèdes normalement chaque champs par un manipulateur quand
même, qui précise comment le formatter d'une manière sémantique
(c-à-d qu'on dit que ses de l'argent, ou un pourcentage, ou...,
et qu'on définit une fois dans le programme comment l'argent et
les pourcentages doivent être formattés).
Dans le message
,Michel Michaud wrote:Dans le message
,
a écritD'où la question suivante : *Pourquoi* avoir fait un cas
particulier pour la largeur????
J'imagine qu'on peut trouver plusieurs raisons, mais essaie
simplement de faire la moindre écriture complexe sans...
Contrairement aux autres manipulateurs, celui-là a une
conséquence sur chaque élément écrit.
Oui, mais c'est un raisonement circulaire. Avec printf, la
précision a bien un effet sur une chaîne de caractères ; si
elle n'en a pas en C++, c'est sans doute parce que, étant
persistant, ça donne des effets perverses.
Mais, avec printf, les éléments non formatés (entre les %)
sont affichés tel quel. Le formatage par printf est donc
finalement très différent du formatage des flux de C++ et il
devient difficile de justifier un en utilisant l'autre...
De toute façon, on a ce qu'on a dans ISO C++ et si on veut en
ajouter ou utiliser autre chose, it's easy enough :-)
À l'inverse, suppose que fixed et setprecision ne soient
pas persistants... (bah, ça ne serait pas si mal, si
c'était setp au lieu de setprecision :-)
Et qu'est-ce que ça changerait, s'ils n'était pas
persistants ? Tu précèdes normalement chaque champs par un
manipulateur quand même, qui précise comment le formatter
d'une manière sémantique (c-à-d qu'on dit que ses de
l'argent, ou un pourcentage, ou..., et qu'on définit une
fois dans le programme comment l'argent et les pourcentages
doivent être formattés).
J'ai l'habitude de tout spécifier à chaque bloc d'écriture,
mais pas à chaque valeur écrite. C'est un habitude qui va bien
avec la persistance de setprecision et fixed en particulier.
Par contre, à l'usage, je considère que setfill aurait
avantage à ne pas être persistant. En fait, pour faire plaisir
à tout le monde l'idéal aurait été d'avoir deux versions de
chacun des manipulateurs : une persistante, une non
persistante :
<< fixed << precision(2) << width(5) << fill('*') // non persistant
<< var1
<< setfixed << setp(2) << setw(5) << setfill('*') // persistant
<< var2 << var3
Il y aurait un problème avec cette approche ?
Dans le message
1111045910.386744.49590@o13g2000cwo.googlegroups.com,
Michel Michaud wrote:
Dans le message
1110989445.179450.207630@l41g2000cwc.googlegroups.com,
adebaene@club-internet.fr <adebaene@club-internet.fr> a écrit
D'où la question suivante : *Pourquoi* avoir fait un cas
particulier pour la largeur????
J'imagine qu'on peut trouver plusieurs raisons, mais essaie
simplement de faire la moindre écriture complexe sans...
Contrairement aux autres manipulateurs, celui-là a une
conséquence sur chaque élément écrit.
Oui, mais c'est un raisonement circulaire. Avec printf, la
précision a bien un effet sur une chaîne de caractères ; si
elle n'en a pas en C++, c'est sans doute parce que, étant
persistant, ça donne des effets perverses.
Mais, avec printf, les éléments non formatés (entre les %)
sont affichés tel quel. Le formatage par printf est donc
finalement très différent du formatage des flux de C++ et il
devient difficile de justifier un en utilisant l'autre...
De toute façon, on a ce qu'on a dans ISO C++ et si on veut en
ajouter ou utiliser autre chose, it's easy enough :-)
À l'inverse, suppose que fixed et setprecision ne soient
pas persistants... (bah, ça ne serait pas si mal, si
c'était setp au lieu de setprecision :-)
Et qu'est-ce que ça changerait, s'ils n'était pas
persistants ? Tu précèdes normalement chaque champs par un
manipulateur quand même, qui précise comment le formatter
d'une manière sémantique (c-à-d qu'on dit que ses de
l'argent, ou un pourcentage, ou..., et qu'on définit une
fois dans le programme comment l'argent et les pourcentages
doivent être formattés).
J'ai l'habitude de tout spécifier à chaque bloc d'écriture,
mais pas à chaque valeur écrite. C'est un habitude qui va bien
avec la persistance de setprecision et fixed en particulier.
Par contre, à l'usage, je considère que setfill aurait
avantage à ne pas être persistant. En fait, pour faire plaisir
à tout le monde l'idéal aurait été d'avoir deux versions de
chacun des manipulateurs : une persistante, une non
persistante :
<< fixed << precision(2) << width(5) << fill('*') // non persistant
<< var1
<< setfixed << setp(2) << setw(5) << setfill('*') // persistant
<< var2 << var3
Il y aurait un problème avec cette approche ?
Dans le message
,Michel Michaud wrote:Dans le message
,
a écritD'où la question suivante : *Pourquoi* avoir fait un cas
particulier pour la largeur????
J'imagine qu'on peut trouver plusieurs raisons, mais essaie
simplement de faire la moindre écriture complexe sans...
Contrairement aux autres manipulateurs, celui-là a une
conséquence sur chaque élément écrit.
Oui, mais c'est un raisonement circulaire. Avec printf, la
précision a bien un effet sur une chaîne de caractères ; si
elle n'en a pas en C++, c'est sans doute parce que, étant
persistant, ça donne des effets perverses.
Mais, avec printf, les éléments non formatés (entre les %)
sont affichés tel quel. Le formatage par printf est donc
finalement très différent du formatage des flux de C++ et il
devient difficile de justifier un en utilisant l'autre...
De toute façon, on a ce qu'on a dans ISO C++ et si on veut en
ajouter ou utiliser autre chose, it's easy enough :-)
À l'inverse, suppose que fixed et setprecision ne soient
pas persistants... (bah, ça ne serait pas si mal, si
c'était setp au lieu de setprecision :-)
Et qu'est-ce que ça changerait, s'ils n'était pas
persistants ? Tu précèdes normalement chaque champs par un
manipulateur quand même, qui précise comment le formatter
d'une manière sémantique (c-à-d qu'on dit que ses de
l'argent, ou un pourcentage, ou..., et qu'on définit une
fois dans le programme comment l'argent et les pourcentages
doivent être formattés).
J'ai l'habitude de tout spécifier à chaque bloc d'écriture,
mais pas à chaque valeur écrite. C'est un habitude qui va bien
avec la persistance de setprecision et fixed en particulier.
Par contre, à l'usage, je considère que setfill aurait
avantage à ne pas être persistant. En fait, pour faire plaisir
à tout le monde l'idéal aurait été d'avoir deux versions de
chacun des manipulateurs : une persistante, une non
persistante :
<< fixed << precision(2) << width(5) << fill('*') // non persistant
<< var1
<< setfixed << setp(2) << setw(5) << setfill('*') // persistant
<< var2 << var3
Il y aurait un problème avec cette approche ?