C++ äquivalent zu tchar.h?



  • Hallo Forum,

    im WinApi Forum hat man mir empfohlen den Header tchar.h einzubinden. Dann könnte ich anhand einer Makrodefinition entscheiden ob ich für Unicode oder Ascii kompiliere.

    Was mir jetzt noch fehlt ist eine Möglichkeit zwischen wstring und string umzuschalten. Denn wenn Unicode nicht definiert ist wird die Ansi Variante der WinApi genommen, während MyWstring.c_str() noch immer einen wchar zurückliefert. Was macht man da?

    Ich bin am überlegen alles auf wchar umzustellen. Was meint Ihr?

    Vielen Dank



  • typedef basic_string<TCHAR> tstring;
    


  • Was meinst Du damit genau? Mir selber einen Typedef zu machen der zwischen wstring und string hin und her schaltet?
    Muß ich bei den iostream bibliotheken nicht auch zwischen Unicode und Ascii hin und her schalten?



  • WinApi Neuling schrieb:

    Was meinst Du damit genau? Mir selber einen Typedef zu machen der zwischen wstring und string hin und her schaltet?

    Ja, so meinte ich es - genau das ist die Aufgabe des obigen Typedef's

    Muß ich bei den iostream bibliotheken nicht auch zwischen Unicode und Ascii hin und her schalten?

    Ja, vermutlich.

    Anmerkung: die Alternative wäre noch, komplett mit wstring zu arbeiten und eventuell ankommende ANSI-Strings gleich am Eingang umzuwandeln (widen() oder A2W()).



  • Vielen Dank 🙂

    Dann verwende ich lieber durchgehend die Unicode Variante.



  • ...gut, du hast dich bereits entschieden. Aber auch die Objekte der IO-Stream-Library lassen sich schnell hinbiegen:

    // So könnte ein tstd.hpp aussehen:
    #if defined( UNICODE ) || defined ( _UNICODE )
    #define tcout wcout
    #define tcin wcin
    #elif
    #define tcout cout
    #define tcin cin
    #endif
    
    typedef std::basic_string<TCHAR> tstring;
    typedef std::basic_stringstream<TCHAR> tstringstream;
    // ...
    

    MfG SideWinder



  • Naja, wer weiß was ich sonst noch hinbiegen müsste. Außerdem sehe ich keinen Vorteil in einer reinen Ansi/Ascii Version meiner SW. Sie muß nur halt überall laufen.


Anmelden zum Antworten