Comment utiliser des littéraux de chaîne larges en c ++ sans mettre L devant chacun
Question
Vous devrez pardonner mon ignorance, mais je ne suis pas habitué à utiliser des jeux de caractères larges en c ++, mais existe-t-il un moyen d'utiliser des littéraux de chaîne large en c ++ sans mettre un L devant chaque littéral?
Si oui, comment?
La solution
Non, il n'y en a pas. Vous devez utiliser le préfixe L (ou une macro telle que _T () avec VC ++ qui s’agrandit quand même pour L une fois compilé pour Unicode).
Autres conseils
La nouvelle norme C ++ 0x définit une autre manière de procéder:
http://fr.wikipedia.org/wiki/C%2B%2B0x#New_string_literals
sur une note connexe .. J'essaie de faire ce qui suit
#define get_switch( m ) myclass::getSwitch(L##m)
qui est une macro le développera
get_switch(isrunning)
dans
myclass::getswitch(L"isrunning")
cela fonctionne très bien dans c ++ visualstudio 2008
mais quand je compile le même code sous mac Xcode (pour iphone), je reçois le message d'erreur:
error: 'L' was not defined in this scope.
EDIT: Solution
#define get_switch( m ) myclass::getSwitch(L ## #m)
cela fonctionne à la fois sur vc ++ et sur xcode mac (gcc)
Pourquoi ne voulez-vous pas préfixer les littéraux de chaîne par un L? C'est assez simple - les chaînes sans L sont des chaînes ANSI ( const char *
), les chaînes avec un L sont des chaînes de caractères larges ( const wchar_t *
). Il existe la macro TEXT ()
, qui transforme un littéral de chaîne en ANSI ou une chaîne de caractères larges en fonction du projet en cours défini pour utiliser la commande Uncode:
#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif
Il existe également la macro _T ()
, équivalente à TEXT ()
.