IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[FAQ Visual C++] Demande de collaboration des membres


Sujet :

MFC

  1. #1
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 351
    Points : 130 281
    Points
    130 281
    Billets dans le blog
    1
    Par défaut [FAQ Visual C++] Demande de collaboration des membres
    Si vous voulez participer à la construction de la future FAQ sur Visual C++, nous vous proposons de poster dans ce thread vos suggestions de Questions / Réponses. Il doit bien évidemment s'agir de questions qui reviennent souvent sur le forum !

    Attention : vous devez proposer la réponse en même temps que la question. Les questions seules seront effacées sans préavis.

    Merci à tous pour votre aide
      1  0

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Disposer d'une méthode Format sur une std::string

    la classe MFC CString dispose d'une méthode Format fonctionnant de la même manière que sprintf du C.
    le code ci-dessous permet de disposer de cette même fonctionnalité pour la classe std::string ou std::wstring.
    Au final deux modes d'utilisations possibles:
    -Utiliser une fonction globale en multi-bytes et Unicode.
    -Etendre la classe string ou wstring grâce à une extension à base de template.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #include <string>
    #include <stdarg.h>
     
    std::string FormatString( const char *szFormat, va_list &arg_ptr )
    {
        if(szFormat==NULL) AfxThrowUserException();
        std::string strRet;
        int nSize=_vscprintf(szFormat,arg_ptr)+1;
        char *szRet= new char[nSize];
     
        vsprintf_s( szRet,nSize,szFormat,arg_ptr);
     
        strRet.assign(szRet);
        delete []szRet;
        return strRet;
    }
    std::string FormatString( const char *szFormat, ... )
    {
        if(szFormat==NULL) AfxThrowUserException();
        std::string strRet;
        va_list arg_ptr;
        va_start(arg_ptr,szFormat);
        strRet.swap(FormatString( szFormat,arg_ptr ));
        va_end(arg_ptr);
        return strRet;
    }
    std::wstring FormatString(const wchar_t *szFormat,va_list &arg_ptr )
    {
        if(szFormat==NULL) AfxThrowUserException();
        std::wstring strRet;
        int nSize=_vscwprintf(szFormat,arg_ptr)+1;
        wchar_t *szRet= new wchar_t[nSize];
     
        vswprintf_s(szRet,nSize,szFormat,arg_ptr);
     
        strRet.assign(szRet);
        delete []szRet;
        return strRet;
     
    }
    std::wstring FormatString(const wchar_t *szFormat,... )
    {
        if(szFormat==NULL) throw (new CInvalidArgException());
        std::wstring strRet;
        va_list arg_ptr;
        va_start(arg_ptr,szFormat);
     
        strRet.swap(FormatString(szFormat,arg_ptr ));
        va_end(arg_ptr);
        return strRet;
     
    }
    template <typename tplstring=std:string,typename T=char >
    class stringex : public tplstring
    {
    public:
        void Format(const T *szFormat, ...)
        {
        if(szFormat==NULL) AfxThrowUserException();
     
        va_list arg_ptr;
        va_start(arg_ptr,szFormat);
     
        swap(::FormatString(szFormat,arg_ptr ));
        va_end(arg_ptr);
        }
    };
    Utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    std::string str=FormatString("essai %d,%10.2f",10,3.14);
     
    stringex<std::string,char> strex;
    strex.Format("essai %d,%10.2f",10,3.14);
    // unicode
    std::wstring wstr=FormatString(L"essai %d,%10.2f",10,3.14);
     
    stringex<std::wstring,wchar_t> wstrex;
    wstrex.Format(L"essai %d,%10.2f",10,3.14);
      0  0

Discussions similaires

  1. Demande de collaboration pour FAQ matrices et quaternions
    Par Laurent Gomila dans le forum Contribuez
    Réponses: 9
    Dernier message: 28/08/2006, 17h34
  2. Réponses: 2
    Dernier message: 21/03/2006, 15h31
  3. Privilèges des "Membres du club" : signature, pièces jointes illimitées, etc.
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 28/07/2004, 12h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo