将宽字符串字面量与字符串宏组合

4

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

#define APPNAME "MyApp"

现在我想通过使用这个宏来构建一个宽字符串,方法是:
const wchar_t *AppProgID = APPNAME L".Document";

然而,这会生成一个“concatenating mismatched strings”编译错误。

有没有一种方法将APPNAME宏转换为宽字符串字面值?


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

12

你试过了吗

#define APPNAME "MyApp"

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

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

是的,但我在想是否有一种方法可以不定义宏的两个版本(宽和非宽)来完成这个操作。 - flashk
我已经更新了我的答案,使用了一些常见的预处理技术来处理字符串。如果您查看http://www.boost.org/doc/libs/1_40_0/libs/preprocessor/doc/index.html,您可以看到更高级的用法。 - Marcel Gosselin

0

没有宏:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接