宏参数的变量名

Pau*_*nta 26 c++ c-preprocessor

我想做这样的事情:

class SomeClass { };

GENERATE_FUNTION(SomeClass)
Run Code Online (Sandbox Code Playgroud)

GENERATE_FUNCTION宏我想定义的名字是由宏参数确定的函数.在这种情况下,我希望它定义一个函数func_SomeClass.怎么办?

K-b*_*llo 33

#define GENERATE_FUNCTION(Argument) void func_##Argument(){ ... }
Run Code Online (Sandbox Code Playgroud)

更多信息请访问:http: //en.wikipedia.org/wiki/C_preprocessor#Token_concatenation


Dmi*_*tri 5

正如大家所说的那样,您可以使用令牌粘贴在宏中构建名称,方法是将##需要的位置放在一起加入令牌.

如果预处理器支持可变参数宏,则还可以包括返回类型和参数列表:

#define GENERATE_FUNCTION(RET,NAM,...) RET func_##NAM(__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)

..so,例如:

GENERATE_FUNCTION(int,SomeClass,int val)
Run Code Online (Sandbox Code Playgroud)

..将扩展到:

int func_SomeClass(int val)
Run Code Online (Sandbox Code Playgroud)