Bonjour,
J'ai un ostream surchargé, avec des manipulateurs maison spécifiques.
En simplifiant :
myostream derive publiquement de std::basic_ostream<...>
et manip est un manipulateur à paramétre pour un myostream
je me suis inspiré de ca :
http://www.two-sdg.demon.co.uk/curbralan/papers/WritingStreamManipulators.html
donc je peux faire :
myostream out;
out << manip(1);
et manip(1) manipule un membre privé de myostream (c'est un friend)
Mon probleme :
out << manip(1); marche tres bien
out << manip(1) << "toto"; marche aussi
out << "toto" << manip(1); ne compile meme pas car operator<<(string&) renvoie un
ostream& de base, et manip attend un myostream&.
Donc, avez vous une solution assez elegante ?
Je ne peux bien sur pas reecrire tous les operator<< pour les types de base, car je veux
que myostream accepte aussi les types utilisateurs (c'est qd meme le but des stream !)
Et je preferes ecrire : hud << push << bold << "hello" << pop plutot que hud.Push().Tag("B").Text("Hello").Pop()
Pourquoi ?
Simple question d'ecriture. Les deux modelisent la même chose, mais je trouve le operator<< plus lisible, et aussi plus proche justement d'un flux std.
En passant, est-ce que tu as considéré aussi la possibilité d'utiliser la durée de vie des temporaires à la place de pop ? Grosso modo, que les attributes positionnées dans une expression soit automatiquement poppées à la fin de l'expression. Que tu utilises << ou des appels de fonctions, ça peut simplifier l'utilisation, et surtout réduire des erreurs dues à l'oublie d'un pop. (Je ne sais pas si ça convient à ton utilisation ou non, mais je l'ai trouvé utile plusieurs fois dans la passée.)
Ca pourrait etre pratique dans certains cas (si l'expression tiens sur une ligne), mais c'est rarement le cas. De plus, le formatage peut etre délégué à une fonction libre tierce (genre Titre()). Mais je garde l'idée dans un coin ;-)
Et je preferes ecrire :
hud << push << bold << "hello" << pop
plutot que
hud.Push().Tag("B").Text("Hello").Pop()
Pourquoi ?
Simple question d'ecriture. Les deux modelisent la même chose, mais je trouve le
operator<< plus lisible, et aussi plus proche justement d'un flux std.
En passant, est-ce que tu as considéré aussi la possibilité d'utiliser
la durée de vie des temporaires à la place de pop ? Grosso modo, que les
attributes positionnées dans une expression soit automatiquement poppées
à la fin de l'expression. Que tu utilises << ou des appels de fonctions,
ça peut simplifier l'utilisation, et surtout réduire des erreurs dues à
l'oublie d'un pop. (Je ne sais pas si ça convient à ton utilisation ou
non, mais je l'ai trouvé utile plusieurs fois dans la passée.)
Ca pourrait etre pratique dans certains cas (si l'expression tiens sur une ligne), mais
c'est rarement le cas. De plus, le formatage peut etre délégué à une fonction libre tierce
(genre Titre()).
Mais je garde l'idée dans un coin ;-)
Et je preferes ecrire : hud << push << bold << "hello" << pop plutot que hud.Push().Tag("B").Text("Hello").Pop()
Pourquoi ?
Simple question d'ecriture. Les deux modelisent la même chose, mais je trouve le operator<< plus lisible, et aussi plus proche justement d'un flux std.
En passant, est-ce que tu as considéré aussi la possibilité d'utiliser la durée de vie des temporaires à la place de pop ? Grosso modo, que les attributes positionnées dans une expression soit automatiquement poppées à la fin de l'expression. Que tu utilises << ou des appels de fonctions, ça peut simplifier l'utilisation, et surtout réduire des erreurs dues à l'oublie d'un pop. (Je ne sais pas si ça convient à ton utilisation ou non, mais je l'ai trouvé utile plusieurs fois dans la passée.)
Ca pourrait etre pratique dans certains cas (si l'expression tiens sur une ligne), mais c'est rarement le cas. De plus, le formatage peut etre délégué à une fonction libre tierce (genre Titre()). Mais je garde l'idée dans un coin ;-)
Loïc Joly
wrote:
Loïc Joly wrote in message
QT propose une alternative que je trouve sympa : Quand on tape du text dans un élément d'IHM, il est possible d'entre quelques tags "HTML" pour mettre en forme une partie du texte. Ca offre plus de flexibilité que de la mise en forme au niveau de l'élément graphique lui même, et c'est assez souple à écrire.
Swing aussi offre quelque chose de semblable en Java : un « renderer » de texte HTML.
Je ne suis pas certain de m'être bien fait comprendre (et je ne connais pas ce que propose JAVA), mais ce dont je parle, ce n'est pas d'un contrôle capable d'afficher du HTML, mais du fait que tous les contrôles (textes statique, titre de boîtes regroupant des radio button, texte de check-box...) comprennent un HTML light qui permet de spécifier certains éléments de mise en forme du texte affiché.
-- Loïc
kanze@gabi-soft.fr wrote:
Loïc Joly <loic.actarus.joly@wanadoo.fr> wrote in message
QT propose une alternative que je trouve sympa : Quand on tape du text
dans un élément d'IHM, il est possible d'entre quelques tags "HTML"
pour mettre en forme une partie du texte. Ca offre plus de flexibilité
que de la mise en forme au niveau de l'élément graphique lui même, et
c'est assez souple à écrire.
Swing aussi offre quelque chose de semblable en Java : un « renderer »
de texte HTML.
Je ne suis pas certain de m'être bien fait comprendre (et je ne connais
pas ce que propose JAVA), mais ce dont je parle, ce n'est pas d'un
contrôle capable d'afficher du HTML, mais du fait que tous les contrôles
(textes statique, titre de boîtes regroupant des radio button, texte de
check-box...) comprennent un HTML light qui permet de spécifier certains
éléments de mise en forme du texte affiché.
QT propose une alternative que je trouve sympa : Quand on tape du text dans un élément d'IHM, il est possible d'entre quelques tags "HTML" pour mettre en forme une partie du texte. Ca offre plus de flexibilité que de la mise en forme au niveau de l'élément graphique lui même, et c'est assez souple à écrire.
Swing aussi offre quelque chose de semblable en Java : un « renderer » de texte HTML.
Je ne suis pas certain de m'être bien fait comprendre (et je ne connais pas ce que propose JAVA), mais ce dont je parle, ce n'est pas d'un contrôle capable d'afficher du HTML, mais du fait que tous les contrôles (textes statique, titre de boîtes regroupant des radio button, texte de check-box...) comprennent un HTML light qui permet de spécifier certains éléments de mise en forme du texte affiché.
-- Loïc
kanze
Loïc Joly wrote in message news:<bnjq33$e3i$...
wrote:
Loïc Joly wrote in message
QT propose une alternative que je trouve sympa : Quand on tape du text dans un élément d'IHM, il est possible d'entre quelques tags "HTML" pour mettre en forme une partie du texte. Ca offre plus de flexibilité que de la mise en forme au niveau de l'élément graphique lui même, et c'est assez souple à écrire.
Swing aussi offre quelque chose de semblable en Java : un « renderer » de texte HTML.
Je ne suis pas certain de m'être bien fait comprendre (et je ne connais pas ce que propose JAVA), mais ce dont je parle, ce n'est pas d'un contrôle capable d'afficher du HTML, mais du fait que tous les contrôles (textes statique, titre de boîtes regroupant des radio button, texte de check-box...) comprennent un HTML light qui permet de spécifier certains éléments de mise en forme du texte affiché.
C'est ce que je croyais avoir dit. Dans une interface graphique, le renderer (mot français ?) se trouve dans les éléments d'affichage, directement ou indirectement. Tu lui passe du HTML, et il le traduit en forme graphique ; il suffit que la chaîne à afficher commence par « <html> ».
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Loïc Joly <loic.actarus.joly@wanadoo.fr> wrote in message
news:<bnjq33$e3i$1@news-reader4.wanadoo.fr>...
kanze@gabi-soft.fr wrote:
Loïc Joly <loic.actarus.joly@wanadoo.fr> wrote in message
QT propose une alternative que je trouve sympa : Quand on tape du
text dans un élément d'IHM, il est possible d'entre quelques tags
"HTML" pour mettre en forme une partie du texte. Ca offre plus de
flexibilité que de la mise en forme au niveau de l'élément graphique
lui même, et c'est assez souple à écrire.
Swing aussi offre quelque chose de semblable en Java : un « renderer
» de texte HTML.
Je ne suis pas certain de m'être bien fait comprendre (et je ne
connais pas ce que propose JAVA), mais ce dont je parle, ce n'est pas
d'un contrôle capable d'afficher du HTML, mais du fait que tous les
contrôles (textes statique, titre de boîtes regroupant des radio
button, texte de check-box...) comprennent un HTML light qui permet de
spécifier certains éléments de mise en forme du texte affiché.
C'est ce que je croyais avoir dit. Dans une interface graphique, le
renderer (mot français ?) se trouve dans les éléments d'affichage,
directement ou indirectement. Tu lui passe du HTML, et il le traduit en
forme graphique ; il suffit que la chaîne à afficher commence par
« <html> ».
--
James Kanze GABI Software mailto:kanze@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
QT propose une alternative que je trouve sympa : Quand on tape du text dans un élément d'IHM, il est possible d'entre quelques tags "HTML" pour mettre en forme une partie du texte. Ca offre plus de flexibilité que de la mise en forme au niveau de l'élément graphique lui même, et c'est assez souple à écrire.
Swing aussi offre quelque chose de semblable en Java : un « renderer » de texte HTML.
Je ne suis pas certain de m'être bien fait comprendre (et je ne connais pas ce que propose JAVA), mais ce dont je parle, ce n'est pas d'un contrôle capable d'afficher du HTML, mais du fait que tous les contrôles (textes statique, titre de boîtes regroupant des radio button, texte de check-box...) comprennent un HTML light qui permet de spécifier certains éléments de mise en forme du texte affiché.
C'est ce que je croyais avoir dit. Dans une interface graphique, le renderer (mot français ?) se trouve dans les éléments d'affichage, directement ou indirectement. Tu lui passe du HTML, et il le traduit en forme graphique ; il suffit que la chaîne à afficher commence par « <html> ».
-- James Kanze GABI Software mailto: Conseils en informatique orientée objet/ http://www.gabi-soft.fr Beratung in objektorientierter Datenverarbeitung 11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16