Как использовать широкие строковые литералы в С++, не помещая L перед каждым
Вам придется простить мое невежество, но я не привык использовать широкие наборы символов в С++, но есть ли способ, которым я могу использовать широкие строковые литералы в С++, не помещая L перед каждым литералом?
Если да, то как?
Ответ 1
Нет, нет. Вы должны использовать префикс L (или макрос, такой как _T(), с VС++, который при компиляции для Unicode расширяется до L).
по соответствующей заметке..
Я пытаюсь сделать следующее
#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().