So verwenden Sie breite String -Literale in C ++, ohne L vor jedem zu setzen
Frage
Sie müssen meine Unwissenheit vergeben, aber ich bin es nicht gewohnt, breite Zeichensätze in C ++ zu verwenden, aber gibt es eine Möglichkeit, weite Streichliterale in C ++ zu verwenden, ohne ein L vor jedes wörtliche Literal zu stellen?
Wenn das so ist, wie?
Lösung
Nein, das gibt es nicht. Sie müssen das L -Präfix (oder ein Makro wie _t () mit VC ++ verwenden, das bei kompiliertem Unicode sowieso auf L erweitert wird).
Andere Tipps
Der neue C ++ 0x -Standard definiert eine andere Möglichkeit, dies zu tun:
http://en.wikipedia.org/wiki/c%2b%2b0x#new_string_literals
in einem verwandten Hinweis .. ich versuche Folgendes zu tun
#define get_switch( m ) myclass::getSwitch(L##m)
Das ist ein Makro, das wird erweitert
get_switch(isrunning)
hinein
myclass::getswitch(L"isrunning")
Dies funktioniert gut in C ++ Visualstudio 2008
Wenn ich jedoch denselben Code unter Mac Xcode (für iPhone) kompiliere, erhalte ich den Fehler:
error: 'L' was not defined in this scope.
Bearbeiten: Lösung
#define get_switch( m ) myclass::getSwitch(L ## #m)
Dies funktioniert sowohl auf VC ++ als auch auf Mac Xcode (GCC)
Warum möchten Sie String -Literale nicht mit einem L präfixen? Es ist recht einfach - Saiten ohne L sind Ansi Strings (const char*
), Saiten mit einem l sind breite Zeichenketten (const wchar_t*
). Dort ist der TEXT()
Makro, das eine Saitenliteral zu einem ANSI oder einer Breitcharakter-Zeichenfolge abhängig vom aktuellen Projekt einsetzt, wird für die Verwendung von Uncodes eingestellt:
#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif
Es gibt auch die _T()
Makro, was gleichbedeutend mit TEXT()
.