Come usare letterali a stringa larga in c ++ senza mettere L davanti a ciascuno di essi
Domanda
Dovrai perdonare la mia ignoranza, ma non sono abituato a usare ampi set di caratteri in c ++, ma c'è un modo in cui posso usare letterali a stringa larga in c ++ senza mettere una L davanti a ogni letterale?
In tal caso, come?
Soluzione
No, non c'è. Devi usare il prefisso L (o una macro come _T () con VC ++ che si espande in L comunque quando compilato per Unicode).
Altri suggerimenti
Il nuovo standard C ++ 0x definisce un altro modo per farlo:
http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals
su una nota correlata .. sto cercando di fare quanto segue
#define get_switch( m ) myclass::getSwitch(L##m)
che è una macro che verrà espansa
get_switch(isrunning)
in
myclass::getswitch(L"isrunning")
funziona perfettamente in c ++ visualstudio 2008
ma quando compilo lo stesso codice in mac Xcode (per iPhone) ottengo l'errore:
error: 'L' was not defined in this scope.
EDIT: soluzione
#define get_switch( m ) myclass::getSwitch(L ## #m)
funziona sia su vc ++ che su mac xcode (gcc)
Perché non vuoi anteporre i letterali di stringa con una L? È abbastanza semplice: le stringhe senza L sono stringhe ANSI ( const char *
), le stringhe con una L sono stringhe di caratteri ampi ( const wchar_t *
). Esiste la macro TEXT ()
, che rende letterale una stringa in un ANSI o una stringa di caratteri grandi a seconda del progetto corrente è impostata per utilizzare Uncode:
#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif
C'è anche la macro _T ()
, che equivale a TEXT ()
.