如何将宏值扩展为宽字符串?

时间:2014-01-14 14:31:57

标签: c++ string visual-studio-2012 macros

假设我有一个宏

#define CLASS_NAME ItemsList

后来我想使用它的值,不是作为符号,而是作为宽字符串。而我的问题开始了。当我简单地写(在常规C ++代码中,而不是在宏定义中):

L#CLASS_NAME

编译器给了我一个错误,说这里没有预期令牌#。当我为它编写代理时

#define WSTRING(S) L#S

并使用它

WSTRING(CLASS_NAME)

我将获得包含“CLASS_NAME”内容的广泛字符串。我想扩展宏,意思是获取它的值,而不是转换宏名称。

那么如何正确地完成它(Visual Studio 2012)?

1 个答案:

答案 0 :(得分:2)

如果你想要L"ItemsList",那么你可以使用:

#define CONCAT2(X, Y) X##Y
#define CONCAT(X, Y) CONCAT2(X, Y)
#define STRINGIFY2(X) #X
#define STRINGIFY(X) STRINGIFY2(X)
#define WIDEN(X) CONCAT(L, STRINGIFY(X))

然后写WIDEN(CLASS_NAME)