none
Aus der MSDN Hotline: CString vs std::string RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,
    heute wurde uns bei der MSDN Hotline unter anderem folgende Frage gestellt:
    Ich möchte eine MFC-Anwendung entwickeln und weiß nun nicht, ob ich von vornherein 'CString' benutzen sollte, oder ob ich einfach 'string' oder 'wstring' in den Fachkonzeptklassen benutzen sollte. D.h. bei der Schnittstelle zum GUI würde ich mittels '.c_str()' eine Konvertierung vornehmen. Was würden Sie empfehlen? Denn, wenn ich alle MFC Datentypen einsetzen würde, dann würde doch Standard C++ immer mehr verdrängt werden. Wenn ich jedoch Standard C++ Datentypen in den Fachkonzeptklassenbehalten würde, dann könnte ich auch andere GUI-Schnittstellenbenutzen.

    Unsere Antwort bzw. unser Lösungsvorschlag darauf war:
    Die MFC ist eine sehr alte API ( einer Zeit, wie man der MFC leicht ansieht, in der die Leute noch keine Ahnung hatten wie eine objektorientiere Kapselung auszusehen hat ). In der Tat ist die MFC älter als der C++ Standard selbst, daher gab es zum Zeitpunkt Ihrer Entstehung keinen std::string und sie musste einen eigenen einführen. Auf die Frage welche der beiden String Klassen nun vorzuziehen ist, kann man keine allgemeingültige Antwort geben. Ist Ihre Anwendung von MFC Klassen durchdrungen ist häufiges hin und her konvertieren der Strings eher umständlich um man sollte eben gleich den CString verwenden.
    Ist Ihre Anwendung nach einem klassischem Model-View-Controller oder verwandtem Pattern strukturiert, würde ich in der Regel versuchen das Model unabhänig von der GUI API zu halten und dort die C++ standard std::strings verwenden. In der View würde ich dann eher die String Klassen der jeweiligen GUI API vorziehen, seien es jetzt QString von QT oder CString von MFC.
    Ultimativ entscheidet diese Frage häufig der praktische Gesichtspunkt "wo benötige ich weniger cast Operatoren". Beachten Sie beim konvertieren, das CString abhängig davon ob das UNICODE Präprozessor Flag gesetzt ist oder nicht Unicode strings oder ASCII strings enthält. Während std::string in C++ immer char als Zeichentyp verwendet, während std::wstring immer den wchar_t verwendet, unabhängig von dem UNICODE Präprozessor Flag.


    Wir hoffen, vielen Besuchern der MSDN Foren durch das Posten dieses Problems und einer möglichen Lösung weiterhelfen zu können.

    Viele Grüße,
    Markus Klein
    MSDN Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline 
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen sowie die allgemein gültigen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline.
    • Verschoben Filip Dimitrov Freitag, 25. Juni 2010 14:46 MSDN Hotline Forum (aus:Aus der MSDN Hotline: Häufig gestellte Fragen und deren Antworten)
    Dienstag, 23. Februar 2010 14:09