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

C++ Discussion :

Sp�cialiser std string


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    230
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 230
    Par d�faut Sp�cialiser std string
    Bonjour � tous !

    j'essaye de sp�cialer la classe std::string, je m'explique :

    je souhaite que dans les signatures de mes m�thodes je puisse d�terminer quel est le type de chaine attendu, par exemple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    UTF8String macRomanToUtf8(MacRomanString& str);
    De plus, je souhaite que la contrainte soit forte, c'est-�-dire que le compilateur refuse les conversions implicites et l'utilisation de la classe parente.

    J'ai donc travaill� sur le prototype suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class UTF8String : public std::string {
        public:
            explicit UTF8String();
            explicit UTF8String(const UTF8String& orig);
            explicit UTF8String(const std::string& other);
            explicit UTF8String(const char* other);
            UTF8String& operator =(const UTF8String& orig);
        };
    J'ai eu au d�but des tas d'erreurs de compilations difficiles � interpr�ter, du style "no matching function for call to UTF8String::UTF8String(UTF8String), ce qui est assez logique puisque je n'ai pas d'op�rateur ni de constructeur qui permette ca.
    Cette erreur de compilation se produit dans des cas comme celui-ci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    UTF8String fn(std::string& str) {
    UTF8String _str = traitement(str);
    return _str;
    }
    Quel est l'op�rateur cach� derri�re "return _str;" ? Je pensais que c'�tait operator= mais visiblement pas...

    Bon quoi qu'il en soit j'ai du renoncer car le fonctionnement �tait tr�s instable, j'avais souvent des Segfault � cause de string non initialis�e ou des choses comme ca (je pensais que ca ne pouvait pas exister ca... des strings non initialis�es). Qu'en pensez-vous ?

    Donc voil�, j'aimerais bien r�ussir mon pari, mais ca semble particuli�rement complexe. Peut-�tre devrais-je partir vers une encapsulation plut�t qu'une sp�cialisation ?

    merci � vous

  2. #2
    Membre �prouv�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mars 2011
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 59
    Par d�faut
    Salut

    la d�rivation n'est pas le bon moyen de customiser la classe string, il faudra plut�t sp�cialiser la template basic_string avec des traits sp�cifiques � ce que tu veux, Herb Sutter en parlait dans Exceptionnal++ avec un exemple de std::string notamment

    comme t'indique le compilateur , "return _str" appelle le constructeur par copie, qui renvoie une copie de la variable locale _str qui sera d�truite

    Cdt

  3. #3
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Le mieux est probablement encore de sp�cialiser char_traits, plus que de sp�cialiser std::string...
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  4. #4
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    Citation Envoy� par esteban Voir le message
    j'essaye de sp�cialer la classe std::string
    Tr�s fortement d�conseill�. Myers �voque ce d�sir funeste dans un de ses bouquins.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. std::string to_string
    Par shirya dans le forum SL & STL
    R�ponses: 5
    Dernier message: 20/12/2005, 15h28
  2. R�ponses: 7
    Dernier message: 25/11/2005, 17h11
  3. R�ponses: 22
    Dernier message: 26/08/2005, 12h46
  4. cannot convert 'std::string' to 'System::String ^'
    Par broadhead dans le forum MFC
    R�ponses: 1
    Dernier message: 14/06/2005, 11h37
  5. std::string, operator =
    Par tut dans le forum SL & STL
    R�ponses: 10
    Dernier message: 05/11/2004, 12h07

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