Подтвердить что ты не робот

Как использовать широкие строковые литералы в С++, не помещая L перед каждым

Вам придется простить мое невежество, но я не привык использовать широкие наборы символов в С++, но есть ли способ, которым я могу использовать широкие строковые литералы в С++, не помещая L перед каждым литералом?

Если да, то как?

4b9b3361

Ответ 1

Нет, нет. Вы должны использовать префикс L (или макрос, такой как _T(), с VС++, который при компиляции для Unicode расширяется до L).

Ответ 3

по соответствующей заметке.. Я пытаюсь сделать следующее

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

который является макросом, будет расширяться

get_switch(isrunning)

в

myclass::getswitch(L"isrunning")

это отлично работает в С++ visualstudio 2008

но когда я компилирую тот же код под Mac Xcode (для iphone), я получаю ошибку:

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

ИЗМЕНИТЬ: Решение

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

это работает как на vС++, так и на mac xcode (gcc)

Ответ 4

Почему вы не хотите префикс строковых литералов с помощью L? Это довольно просто - строки без L являются строками ANSI (const char*), строки с L - широкосимвольные строки (const wchar_t*). Существует макрос TEXT(), который делает строковый литерал в ANSI или широкосимвольной строке, в зависимости от текущего проекта, используется для использования Uncode:


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

Также существует макрос _T(), который эквивалентен TEXT().