Depuis std::string
est en fait un typedef
d'une classe modèle, comment puis-je la remplacer ? Je veux créer un fichier UTF-8 std::string
qui renverra la longueur correcte, entre autres choses.
Réponses
Trop de publicités?Si vous doit définir votre propre type de chaîne de caractères, alors n'héritez pas de std::string
mais définissez votre propre Traits de caractère et faire quelque chose comme
typedef std::basic_string<unsigned char, utf8_traits> utf8string;
Voir aussi Site web d'Herb Sutter .
NE DÉRIVENT PAS DE LA CHAÎNE
std::string, c'est-à-dire l'ensemble du modèle basic_string, n'est pas conçu pour être dérivé. Il existe déjà des millions d'articles à ce sujet. Il n'a pas de fonctions virtuelles, il n'y a donc rien à surcharger. Le mieux que vous puissiez faire est de cacher quelque chose. Le mieux est d'utiliser la composition/agrégation ! C'est-à-dire qu'il suffit de garder un membre de type string dans votre classe et de transférer les appels ! Encore une fois, juste pour être sûr
NE DÉRIVENT PAS DE LA CHAÎNE
En C++, il est généralement considéré comme une erreur de dériver d'un conteneur de la bibliothèque standard. Cependant, la fonctionnalité que vous recherchez a déjà été implémentée. Jetez un coup d'œil à Glib::ustring .
J'espère que cela vous aidera !
Assurez-vous d'abord de savoir ce que vous faites. Quelle est exactement la "longueur correcte" que vous souhaitez obtenir de vos objets chaîne ? Le nombre de points de code ? Cela ne correspond pas toujours au nombre de caractères tel que perçu par l'utilisateur.
Quoi qu'il en soit, jetez un coup d'œil à la utf8-cpp pour voir une approche alternative à la dérivation à partir de std::string.
- Réponses précédentes
- Plus de réponses