我需要做类似的事情:
#define charSz 16
#if charSz == 8
typedef char8_t Char;
#define STR(s) #s
#elif charSz == 16
typedef char16_t Char;
#define STR(s) u ## #s
#elif charSz == 32
typedef char32_t Char;
#define STR(s) U ## #s
#endif
#include <string>
typedef std::basic_string< Char > String;
int main(){
String s=STR(nice) ;
String t=STR(very nice) ;
String u=STR(good) ;
return 0;
}
但预处理器发布
allocator.cpp:24:21:错误:粘贴“u”和“”good“”没有给出有效的预处理令牌
答案 0 :(得分:2)
那些u""
/ U""
字符串文字只是C ++ 11及更高版本,在旧版本的C ++中不受支持。
如果您的编译器支持C ++ 11并且您的项目允许使用它,那么启用C ++ 11编译(例如使用-std=c++11
开关的g ++和clang ++)。
否则,你运气不好。较旧的L""
不是UTF-16字符串的正确替代品,并且根本没有任何32位宽的字符串文字。