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 :
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.Code:UTF8String macRomanToUtf8(MacRomanString& str);
J'ai donc travaill� sur le prototype suivant :
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.Code:
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); };
Cette erreur de compilation se produit dans des cas comme celui-ci :
Quel est l'op�rateur cach� derri�re "return _str;" ? Je pensais que c'�tait operator= mais visiblement pas...Code:
1
2
3
4
5 UTF8String fn(std::string& str) { UTF8String _str = traitement(str); return _str; }
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