你必须原谅我的无知,但我不习惯在c ++中使用宽字符集,但是有没有一种方法可以在c ++中使用宽字符串文字而不在每个文字前放置一个L?

若然,怎么样?

有帮助吗?

解决方案

不,没有。你必须使用L前缀(或一个宏,如_T()与VC ++,当编译为Unicode时,无论如何都会扩展为L。)

其他提示

新的C ++ 0x Standard定义了另一种方法:
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()宏,它根据当前项目设置为使用Uncode,将字符串文字转换为ANSI或宽字符串:


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

还有 _T()宏,相当于 TEXT()

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top