Pergunta

Você terá que perdoar minha ignorância, mas não estou acostumado a usar grandes conjuntos de caracteres em C ++, mas existe uma maneira de usar literais de cordas amplas em C ++ sem colocar um L na frente de cada literal?

Se sim, como?

Foi útil?

Solução

Não, não há. Você deve usar o prefixo L (ou uma macro como _t () com VC ++ que se expande para L de qualquer maneira quando compilado para unicode).

Outras dicas

O novo padrão C ++ 0x define outra maneira de fazer isso:
http://en.wikipedia.org/wiki/C%2B%2B0X#New_String_literals

em uma nota relacionada .. estou tentando fazer o seguinte

#define  get_switch( m )   myclass::getSwitch(L##m)

que é uma macro que se expande

get_switch(isrunning)

em

myclass::getswitch(L"isrunning")

Isso funciona bem no C ++ VisualStudio 2008

Mas quando compilar o mesmo código no Mac Xcode (para iPhone), recebo o erro:

error: 'L' was not defined in this scope.

Editar: Solução

#define  get_switch( m )   myclass::getSwitch(L ## #m)

Isso funciona no VC ++ e Mac Xcode (GCC)

Por que você não quer prefixar literais de string com um L? É bastante simples - strings sem um l são strings ANSI (const char*), strings com um L são cordas de grande caractere (const wchar_t*). Existe o TEXT() Macro, que faz de uma corda literal em um ANSI ou uma string ampla, dependendo do projeto atual, está definido para usar o UNCODE:


#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif

Há também o _T() macro, que é equivalente a TEXT().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top