Forum Programmation.c++ [portage] Librairie CString -> string (STL)

Posté par  .
Étiquettes : aucune
0
14
nov.
2007
Bonjour à tous,

J'essaye de faire le portage d'une application MFC/windows vers gcc.

Cette application est bardée de CString l'objet chaîne de caractère sous Windows.

J'ai pas vraiment envie de reprendre toute les utilisations de cet objet pour mettre des string à la place (un boulot fou). D'où ma question, connaîtriez voue une librairie qui wrappe les CString vers la stl ?

Merci d'avance
  • # fonction Format()

    Posté par  . Évalué à 2.

    la seul fonction manquante (ou que je n'est pas trouver) est la fonction format().

    pour le reste il suffit de faire un class CString qui appelle les equivalent de la stl.

    Note perso j'ai fais un remplace all "CString" par "std::string" puis j'ai gérer les cas qui posaient probleme. Au final, a part la fontion format, il n' y a pas trop de soussis.

    Ps: Si quelqun commait un equivalent de CString::Format(), qu'il la donne


    Merci
    • [^] # Re: fonction Format()

      Posté par  . Évalué à 2.

      Ce que je vais dire est peut-être très bête (je ne connais pas les MFC) mais le CString::Format() ce ne serait pas un bête sprintf ?
      • [^] # Re: fonction Format()

        Posté par  . Évalué à 2.

        moi j'utiliserai asprintf qui alloue automatiquement l'espace nécessaire ( attention gnu c et *bsd uniquement, ce n'est pas standard !!! )

        puis le mieux c'est de faire une fonction format, qui se charge de renvoyer un string créé à partir de la chaine créé par asprintf ( en pensant à libérer l'espace aloué )

        Une autre solution consisterai à définir un espace suffisament grand et utiliser snprintf.
        dans un cas on a une allocation dynamique ( avec les impacts sur les performances), de l'autre on à une allocation statiquen, plus portable, mais avec un risque de tronquer des chaines.

        les deux solutions sont théoriquement protégées des débordement de buffer ( il me semble )

        Il ne faut pas décorner les boeufs avant d'avoir semé le vent

      • [^] # Re: fonction Format()

        Posté par  . Évalué à 1.

        la diference est que format alloue la memoire pour stocker le resultat. pas de probleme de taille

        mais apparament asprintf a l'aire d'etre ca!

        Merci
    • [^] # Re: fonction Format()

      Posté par  (site web personnel) . Évalué à 1.

      Il y a boost.format qui propose un service semblable, mais de façon assez différente. AMHA, boost.format est beaucoup plus sûr vu qu'il ne repose pas sur la la notion de fonction variadique (-> '...'), et plus puissant aussi.

      Pas oublier aussi toutes les fois où une CString était directement passée à un "const char*", avec les chaînes standard, il faudra faire des appels explicites à std::string::c_str().

      Il devrait aussi y avoir des différences par rapport à l'aspect UNICODE & cie, si je me souviens bien.

      Autrement, j'avais croisé sur codeguru/codeproject (?) des classes mimant le comportement (et le nom) de CString.
      A termes, j'ai envie de dire que mieux vaut migrer vers la chaine standard.

      [pinaillage]
      PS: std::string ne fait pas parti de la STL historique. Juste de la SL du C++
      [/]

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.