用于创建字符串文字的C ++预处理程序

时间:2014-07-02 10:35:20

标签: c++ c-preprocessor

我需要做类似的事情:

#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“”没有给出有效的预处理令牌

1 个答案:

答案 0 :(得分:2)

那些u"" / U""字符串文字只是C ++ 11及更高版本,在旧版本的C ++中不受支持。

如果您的编译器支持C ++ 11并且您的项目允许使用它,那么启用C ++ 11编译(例如使用-std=c++11开关的g ++和clang ++)。

否则,你运气不好。较旧的L""不是UTF-16字符串的正确替代品,并且根本没有任何32位宽的字符串文字。