假设我有一个宏
#define CLASS_NAME ItemsList
后来我想使用它的值,不是作为符号,而是作为宽字符串。而我的问题开始了。当我简单地写(在常规C ++代码中,而不是在宏定义中):
L#CLASS_NAME
编译器给了我一个错误,说这里没有预期令牌#
。当我为它编写代理时
#define WSTRING(S) L#S
并使用它
WSTRING(CLASS_NAME)
我将获得包含“CLASS_NAME”内容的广泛字符串。我想扩展宏,意思是获取它的值,而不是转换宏名称。
那么如何正确地完成它(Visual Studio 2012)?
答案 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)
。