각각의 앞에 L을 넣지 않고 C ++에서 넓은 문자 리터럴을 사용하는 방법
문제
당신은 내 무지를 용서해야하지만, 나는 C ++에서 넓은 문자 세트를 사용하는 데 익숙하지 않지만, 각 문자 그대로 L을 넣지 않고 C ++에서 넓은 문자리 리터럴을 사용할 수있는 방법이 있습니까?
그렇다면 어떻게?
해결책
아니요, 없습니다. 유니 코드를 위해 컴파일 될 때 L 접두사 (또는 _t (예 : _t)와 같은 매크로를 사용해야합니다).
다른 팁
새로운 C ++ 0X 표준은이 작업을 수행하는 다른 방법을 정의합니다.
http://en.wikipedia.org/wiki/c%2B%2B0X#New_string_Literals
관련 메모에 .. 다음을하려고합니다
#define get_switch( m ) myclass::getSwitch(L##m)
이는 매크로입니다
get_switch(isrunning)
~ 안으로
myclass::getswitch(L"isrunning")
이것은 C ++ VisualStudio 2008에서 잘 작동합니다
그러나 Mac Xcode (iPhone의 경우)에서 동일한 코드를 컴파일하면 오류가 발생합니다.
error: 'L' was not defined in this scope.
편집 : 솔루션
#define get_switch( m ) myclass::getSwitch(L ## #m)
VC ++ 및 MAC Xcode (GCC) 모두에서 작동합니다.
왜 l로 문자열 문자를 접두사하고 싶지 않습니까? 매우 간단합니다 - l이없는 줄은 ANSI 줄입니다 (const char*
), L을 가진 문자열은 넓은 문자열입니다 (const wchar_t*
). 거기에 있습니다 TEXT()
현재 프로젝트에 따라 문자열을 ANSI 또는 광범위한 문자열로 만드는 매크로를 사용하지 않도록 설정되어 있습니다.
#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif
또한 있습니다 _T()
매크로 TEXT()
.
제휴하지 않습니다 StackOverflow