【问题标题】:Combining wide string literal with string macro将宽字符串文字与字符串宏相结合
【发布时间】:2010-12-13 23:43:46
【问题描述】:

我有一个字符串的宏如下:

#define APPNAME "MyApp"

现在我想用这个宏构造一个宽字符串,方法是:

const wchar_t *AppProgID = APPNAME L".Document";

但是,这会产生“连接不匹配的字符串”编译错误。

有没有办法将 APPNAME 宏转换为宽字符串文字?

【问题讨论】:

  • 注意:对于这种情况,C++0x 有一个新的“做正确的事”规则。 §2.14.5/13:“如果一个字符串文字没有编码前缀,则将其视为与另一个操作数具有相同编码前缀的字符串文字。”

标签: c++ c c-preprocessor widestring


【解决方案1】:

你试过了吗

#define APPNAME "MyApp"

#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)

const wchar_t *AppProgID = WIDEN(APPNAME) L".Document";

【讨论】:

  • 是的,但我想知道是否有办法做到这一点,而不必定义宏的两个版本(宽和非宽)。
  • 我已经更新了我的答案以使用一些常见的预处理器技术来处理字符串。看boost.org/doc/libs/1_40_0/libs/preprocessor/doc/index.html可以看到更高级的用法
猜你喜欢
  • 1970-01-01
  • 2021-07-27
  • 2020-02-06
  • 2011-10-03
  • 2021-03-30
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
相关资源
最近更新 更多