Il semble que faire cohabiter dans un même projet une bibliothèque
utilisant std::string et une autre utilisant une autre classe "chaîne"
(par exemple, wxWidgets qui utilise sa propre classe wxString) soit
courant.
Mais quelle est la meilleure méthode pour faire ça sans douleur ?
Note : je suppose qu'on a déjà des fonctions de conversion explicite
std::string W2S (wxString const&);
wxString S2W (std::string const&);
(Elles sont assez simples à implémenter de toutes façons).
Par exemple, si on a une fonction
void g (std::string const&);
et une variable wxs de classe wxString, comment passer ce wxs à g ?
Faut-il écrire explicitement à chaque fois g (W2S (wxs)); ?
Vaut-il mieux faire un wrapper "une fois pour toutes", mais pour
chaque fonction ?
void g (wxString const& w) { g (W2S (w)); }
Solution certes élégante, mais passablement fastidieuse si on a 132
fonctions de ce style...
De plus, comment faire quand la fonction g est le constructeur d'une
classe ?
class C
{
public: C (std::string const&);
};
i.e. comment construire (élégamment) un objet de classe C à partir
d'un wxString ?
Y a-t-il des outils qui sont capables de pondre automatiquement de
tels wrappers ?
Merci d'avance pour vos idées, suggestions et expériences...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Luc Hermitte
Fabien LE LEZ wrote in news::
Merci d'avance pour vos idées, suggestions et expériences...
A l'install, j'avais vu des options qui permettaient de faire en sorte que la classe de wxWidget descende de std::string.
Je n'ai par contre pas encore eu le temps de m'y plonger sérieusement.
Sinon, j'étais tombé sur une réflexion & solution générale au problème des bibliothèques différentes qui définissent le même genre de types, par le gars qui s'occupe de STLsoft, probablement dans ses articles sur CUJ (efficient integer to string convertions).
HTH,
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>
Fabien LE LEZ <gramster@gramster.com> wrote in
news:p9r8e05ivada3b7gdn8l6dpnsmji601bh7@4ax.com:
Merci d'avance pour vos idées, suggestions et expériences...
A l'install, j'avais vu des options qui permettaient de faire en sorte
que la classe de wxWidget descende de std::string.
Je n'ai par contre pas encore eu le temps de m'y plonger sérieusement.
Sinon, j'étais tombé sur une réflexion & solution générale au problème
des bibliothèques différentes qui définissent le même genre de types, par
le gars qui s'occupe de STLsoft, probablement dans ses articles sur CUJ
(efficient integer to string convertions).
HTH,
--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>
Merci d'avance pour vos idées, suggestions et expériences...
A l'install, j'avais vu des options qui permettaient de faire en sorte que la classe de wxWidget descende de std::string.
Je n'ai par contre pas encore eu le temps de m'y plonger sérieusement.
Sinon, j'étais tombé sur une réflexion & solution générale au problème des bibliothèques différentes qui définissent le même genre de types, par le gars qui s'occupe de STLsoft, probablement dans ses articles sur CUJ (efficient integer to string convertions).
HTH,
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>
Fabien LE LEZ
On Fri, 02 Jul 2004 00:28:05 +0200, Luc Hermitte :
A l'install, j'avais vu des options qui permettaient de faire en sorte que la classe de wxWidget descende de std::string.
Je crois bien qu'ici même on m'avait déconseillé de dériver de std::vector<>, à cause de l'absence de destructeur virtuel. L'argument ne vaut pas pour std::string ?
-- schtroumpf schtroumpf
On Fri, 02 Jul 2004 00:28:05 +0200, Luc Hermitte
<hermitte@free.fr.invalid>:
A l'install, j'avais vu des options qui permettaient de faire en sorte
que la classe de wxWidget descende de std::string.
Je crois bien qu'ici même on m'avait déconseillé de dériver de
std::vector<>, à cause de l'absence de destructeur virtuel. L'argument
ne vaut pas pour std::string ?
On Fri, 02 Jul 2004 00:28:05 +0200, Luc Hermitte :
A l'install, j'avais vu des options qui permettaient de faire en sorte que la classe de wxWidget descende de std::string.
Je crois bien qu'ici même on m'avait déconseillé de dériver de std::vector<>, à cause de l'absence de destructeur virtuel. L'argument ne vaut pas pour std::string ?
-- schtroumpf schtroumpf
Luc Hermitte
Fabien LE LEZ wrote in news::
On Fri, 02 Jul 2004 00:28:05 +0200, Luc Hermitte :
A l'install, j'avais vu des options qui permettaient de faire en sorte que la classe de wxWidget descende de std::string.
Je crois bien qu'ici même on m'avait déconseillé de dériver de std::vector<>, à cause de l'absence de destructeur virtuel. L'argument ne vaut pas pour std::string ?
Oui et non. Pour le destructeur, il faut savoir qu'il ne faudra jamais écrire : std::string * s = new wxString("toto"); Déjà en ce qui me concerne gérer dynamiquement (std::string * ps = new...) une std::string est limite une hérésie.
Ensuite, il reste le problème qu'il ne faut pas masquer des fonctions héritées. On pourrait croire qu'elles soient redéfinies, mais non. Tout ce que l'on peut faire, c'est les masquer. Il faudrait que je revois le code de wxString, je ne sais plus si ils font ce genre de choses ou non. Dans mes souvenirs, ce n'est pas le cas.
Ce genre de problème se poserait plutôt si on tentait de dériver publiquement les vecteurs histoire de les spécialiser pour la manipulation de pointeurs bruts.
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>
Fabien LE LEZ <gramster@gramster.com> wrote in
news:vsb9e0tmomscb2m0dom3k7k7jimaeel0j1@4ax.com:
On Fri, 02 Jul 2004 00:28:05 +0200, Luc Hermitte
<hermitte@free.fr.invalid>:
A l'install, j'avais vu des options qui permettaient de faire en sorte
que la classe de wxWidget descende de std::string.
Je crois bien qu'ici même on m'avait déconseillé de dériver de
std::vector<>, à cause de l'absence de destructeur virtuel. L'argument
ne vaut pas pour std::string ?
Oui et non.
Pour le destructeur, il faut savoir qu'il ne faudra jamais écrire :
std::string * s = new wxString("toto");
Déjà en ce qui me concerne gérer dynamiquement (std::string * ps =
new...) une std::string est limite une hérésie.
Ensuite, il reste le problème qu'il ne faut pas masquer des fonctions
héritées. On pourrait croire qu'elles soient redéfinies, mais non. Tout
ce que l'on peut faire, c'est les masquer.
Il faudrait que je revois le code de wxString, je ne sais plus si ils
font ce genre de choses ou non. Dans mes souvenirs, ce n'est pas le cas.
Ce genre de problème se poserait plutôt si on tentait de dériver
publiquement les vecteurs histoire de les spécialiser pour la
manipulation de pointeurs bruts.
--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>
On Fri, 02 Jul 2004 00:28:05 +0200, Luc Hermitte :
A l'install, j'avais vu des options qui permettaient de faire en sorte que la classe de wxWidget descende de std::string.
Je crois bien qu'ici même on m'avait déconseillé de dériver de std::vector<>, à cause de l'absence de destructeur virtuel. L'argument ne vaut pas pour std::string ?
Oui et non. Pour le destructeur, il faut savoir qu'il ne faudra jamais écrire : std::string * s = new wxString("toto"); Déjà en ce qui me concerne gérer dynamiquement (std::string * ps = new...) une std::string est limite une hérésie.
Ensuite, il reste le problème qu'il ne faut pas masquer des fonctions héritées. On pourrait croire qu'elles soient redéfinies, mais non. Tout ce que l'on peut faire, c'est les masquer. Il faudrait que je revois le code de wxString, je ne sais plus si ils font ce genre de choses ou non. Dans mes souvenirs, ce n'est pas le cas.
Ce genre de problème se poserait plutôt si on tentait de dériver publiquement les vecteurs histoire de les spécialiser pour la manipulation de pointeurs bruts.
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>
Fabien LE LEZ
On Tue, 03 Aug 2004 15:58:39 +0200, Luc Hermitte :
Déjà en ce qui me concerne gérer dynamiquement (std::string * ps = new...) une std::string est limite une hérésie.
En général, oui -- car std::string a sans conteste une sémantique de valeur. Mais justement, le but ici est de dériver std::string, et d'utiliser le polymorphisme d'héritage, pour pouvoir mélanger allègrement std::string et machinString sans bouger les oreilles. De là à l'allocation dynamique, il n'y a qu'un pas...
-- ;-)
On Tue, 03 Aug 2004 15:58:39 +0200, Luc Hermitte
<hermitte@free.fr.invalid>:
Déjà en ce qui me concerne gérer dynamiquement (std::string * ps =
new...) une std::string est limite une hérésie.
En général, oui -- car std::string a sans conteste une sémantique de
valeur.
Mais justement, le but ici est de dériver std::string, et d'utiliser
le polymorphisme d'héritage, pour pouvoir mélanger allègrement
std::string et machinString sans bouger les oreilles. De là à
l'allocation dynamique, il n'y a qu'un pas...
On Tue, 03 Aug 2004 15:58:39 +0200, Luc Hermitte :
Déjà en ce qui me concerne gérer dynamiquement (std::string * ps = new...) une std::string est limite une hérésie.
En général, oui -- car std::string a sans conteste une sémantique de valeur. Mais justement, le but ici est de dériver std::string, et d'utiliser le polymorphisme d'héritage, pour pouvoir mélanger allègrement std::string et machinString sans bouger les oreilles. De là à l'allocation dynamique, il n'y a qu'un pas...
-- ;-)
Fabien LE LEZ
On Thu, 01 Jul 2004 22:00:40 +0200, Fabien LE LEZ :
Il semble que faire cohabiter dans un même projet une bibliothèque utilisant std::string et une autre utilisant une autre classe "chaîne" (par exemple, wxWidgets qui utilise sa propre classe wxString) soit courant. Mais quelle est la meilleure méthode pour faire ça sans douleur ?
Que penser de la méthode toute simple qui consiste à utiliser partout dans mon code, une classe MyString du style
On Thu, 01 Jul 2004 22:00:40 +0200, Fabien LE LEZ
<gramster@gramster.com>:
Il semble que faire cohabiter dans un même projet une bibliothèque
utilisant std::string et une autre utilisant une autre classe "chaîne"
(par exemple, wxWidgets qui utilise sa propre classe wxString) soit
courant.
Mais quelle est la meilleure méthode pour faire ça sans douleur ?
Que penser de la méthode toute simple qui consiste à utiliser partout
dans mon code, une classe MyString du style
On Thu, 01 Jul 2004 22:00:40 +0200, Fabien LE LEZ :
Il semble que faire cohabiter dans un même projet une bibliothèque utilisant std::string et une autre utilisant une autre classe "chaîne" (par exemple, wxWidgets qui utilise sa propre classe wxString) soit courant. Mais quelle est la meilleure méthode pour faire ça sans douleur ?
Que penser de la méthode toute simple qui consiste à utiliser partout dans mon code, une classe MyString du style
Il semble que faire cohabiter dans un même projet une bibliothèque utilisant std::string et une autre utilisant une autre classe "chaîne" (par exemple, wxWidgets qui utilise sa propre classe wxString) soit courant. Mais quelle est la meilleure méthode pour faire ça sans douleur ?
Que penser de la méthode toute simple qui consiste à utiliser partout dans mon code, une classe MyString du style
std::string & s = tastring; s += "toto"; assert(match(tastring, "toto$"));
Je pense que dans ce cas (wxstring et std::string) vu le lien possible (héritage) entre les deux depuis les versions "récentes" de wxWidgets, c'est se compliquer la vie pour rien.
Sinon de mémoire, le mainteneur de STLSoft (il a écrit divers articles pour le C/C++ Users Journal) a proposé tout un arsenal de trucs qui s'apparentent vaguement à des proxies, et permettent de faire dialoguer se qui provient de la bibliothèque standard du C++ avec divers frameworks dont les MFC. Je pense que les mécanismes mis en oeuvre sont extensibles à wxWidget.
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>
Salut,
Fabien LE LEZ <gramster@gramster.com> wrote in
news:hu40h013g2pbpjptp52d2bo4j168uctqr3@4ax.com:
Il semble que faire cohabiter dans un même projet une bibliothèque
utilisant std::string et une autre utilisant une autre classe "chaîne"
(par exemple, wxWidgets qui utilise sa propre classe wxString) soit
courant. Mais quelle est la meilleure méthode pour faire ça sans
douleur ?
Que penser de la méthode toute simple qui consiste à utiliser partout
dans mon code, une classe MyString du style
std::string & s = tastring;
s += "toto";
assert(match(tastring, "toto$"));
Je pense que dans ce cas (wxstring et std::string) vu le lien possible
(héritage) entre les deux depuis les versions "récentes" de wxWidgets,
c'est se compliquer la vie pour rien.
Sinon de mémoire, le mainteneur de STLSoft (il a écrit divers articles
pour le C/C++ Users Journal) a proposé tout un arsenal de trucs qui
s'apparentent vaguement à des proxies, et permettent de faire dialoguer
se qui provient de la bibliothèque standard du C++ avec divers frameworks
dont les MFC. Je pense que les mécanismes mis en oeuvre sont extensibles
à wxWidget.
--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>
Il semble que faire cohabiter dans un même projet une bibliothèque utilisant std::string et une autre utilisant une autre classe "chaîne" (par exemple, wxWidgets qui utilise sa propre classe wxString) soit courant. Mais quelle est la meilleure méthode pour faire ça sans douleur ?
Que penser de la méthode toute simple qui consiste à utiliser partout dans mon code, une classe MyString du style
std::string & s = tastring; s += "toto"; assert(match(tastring, "toto$"));
Je pense que dans ce cas (wxstring et std::string) vu le lien possible (héritage) entre les deux depuis les versions "récentes" de wxWidgets, c'est se compliquer la vie pour rien.
Sinon de mémoire, le mainteneur de STLSoft (il a écrit divers articles pour le C/C++ Users Journal) a proposé tout un arsenal de trucs qui s'apparentent vaguement à des proxies, et permettent de faire dialoguer se qui provient de la bibliothèque standard du C++ avec divers frameworks dont les MFC. Je pense que les mécanismes mis en oeuvre sont extensibles à wxWidget.
-- Luc Hermitte <hermitte at free.fr> FAQ de <news:fr.comp.lang.c++> : <http://www.cmla.ens-cachan.fr/Utilisateurs/dosreis/C++/FAQ/> Dejanews : <http://groups.google.com/advanced_group_search>