Verwendung t_str() bei C++ Builder 2010



  • Hallo,

    ich bin gerade dabei ein Projekt auf den C++ Builder 2010 zu portieren. Dabei ist die Umstellung des Builders auf Unicode eine nicht gerade kleine Hürde.

    Bei der Umstellung ist mir in der Readme des Builders ein Satz aufgefallen, dessen Tragweite sich im weiteren Verlauf als recht schwerwiegend herausgestellt hat.

    Zitat
    "UnicodeString::t_str() reduziert die Größe von Wide-Daten...."

    Auf gut deutsch, die Anwendung von UnicodeString::t_str() zerstört den Inhalt des UnicodeString.
    Dies kann man auch wirklich gut beim Debuggen beobachten, nachdem UnicodeString::t_str() angewandt wurde, steht in UnicodeString nur noch Müll drin und wenn es sich eim UI-Element handelt, dann wird als Text beim nächsten Paint auch wirklich Müll angezeigt.

    Ich habe dies bei mir nun so gelöst, dass ich eine Stelle wie folgt ersetzt habe:
    String(UnicodeString).t_str()

    Mich würde nun interessieren wie Ihr das gelöst habt?
    Natürlich könnte man eine Anwendung komplett auf Unicode umstellen und dann solche Konstrukte vermeiden, dass ist aber bei diesem Projekt sehr schwer zu realisieren.

    Des Weiteren würde mich interessieren, warum das Zerstören des UnicodeString nicht immer passiert, es gibt UI-Elemente bei denen die Anwendung von t_str() keine Auswirkung hat obwohl die Texte vom Typ UnicodeString sind.

    Danke für Euere Antworten!

    Gruss



  • Ich benutze .t_str() gar nicht, weil sein Verhalten von den Projekteinstellungen abhängig ist.

    Bei .c_str() ist es vom Stringtyp abhängig was zurückkommt, das finde ich übersichtlicher.



  • TWC++ schrieb:

    Mich würde nun interessieren wie Ihr das gelöst habt?

    Ich verwende t_str() überhaupt nicht, und ich rate auch jedem anderen dringlich davon ab. Die Existenz dieser Methode ist anerkanntermaßen ein fundamentaler Designfehler, da so gut wie unmöglich ist, sie korrekt zu implementieren.


Log in to reply