C++11 宏名称扩展语法
我开始尝试使用宏生成数据结构。唉,我遇到了一个奇怪的障碍。我想编写以下宏:C++11 宏名称扩展语法,c++11,macros,C++11,Macros,我开始尝试使用宏生成数据结构。唉,我遇到了一个奇怪的障碍。我想编写以下宏: #define CREATE_STRUCT(NAME) struct ##NAME { } 我尝试这样使用它: CREATE_STRUCT(test); 但是,它会生成一个错误,宏扩展显然不起作用。我注意到,在我所看到的每一个此类宏扩展示例中,标记前面都有一个下划线()。例如: #define CREATE_STRUCT(NAME) struct _##NAME { } 这一个可以工作,但它当然会在新声明的类型的开
#define CREATE_STRUCT(NAME) struct ##NAME { }
我尝试这样使用它:
CREATE_STRUCT(test);
但是,它会生成一个错误,宏扩展显然不起作用。我注意到,在我所看到的每一个此类宏扩展示例中,
标记前面都有一个下划线(
)。例如:
#define CREATE_STRUCT(NAME) struct _##NAME { }
这一个可以工作,但它当然会在新声明的类型的开头抛出一个下划线
所以,这里有几个问题:
##
标记前面加字符#
标记,有哪些规则提前谢谢你 除非要将多个令牌合并为一个令牌,否则不需要令牌粘贴操作符。例如,从Test和This中获取TestThis。在您的情况下,您只需执行以下操作:
#define CREATE_STRUCT(NAME) struct NAME { }
如果您在宏上运行
g++-E file.cc
,您将看到预处理器提供了structtest{}代码>这会导致一个错误。我不知道您为什么要用###作为示例。#用于将两个符号连接在一起。请尝试#定义创建结构(名称)结构名称{}