【发布时间】:2011-11-25 14:02:11
【问题描述】:
我想做这样的事情:
class SomeClass { };
GENERATE_FUNTION(SomeClass)
GENERATE_FUNCTION 宏我想定义一个函数,其名称将由宏参数确定。在这种情况下,我希望它定义一个函数func_SomeClass。怎么可能呢?
【问题讨论】:
标签: c++ c-preprocessor
我想做这样的事情:
class SomeClass { };
GENERATE_FUNTION(SomeClass)
GENERATE_FUNCTION 宏我想定义一个函数,其名称将由宏参数确定。在这种情况下,我希望它定义一个函数func_SomeClass。怎么可能呢?
【问题讨论】:
标签: c++ c-preprocessor
#define GENERATE_FUNCTION(class_name) func_##class_name##
【讨论】:
#define GENERATE_FUNCTION(Argument) void func_##Argument(){ ... }
更多信息在这里: http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation
【讨论】:
func_ 部分怎么办?
正如大家所说,您可以使用令牌粘贴在宏中构建名称,方法是将 ## 放置在需要将令牌连接在一起的位置。
如果预处理器支持可变参数宏,你也可以包含返回类型和参数列表:
#define GENERATE_FUNCTION(RET,NAM,...) RET func_##NAM(__VA_ARGS__)
..so,例如:
GENERATE_FUNCTION(int,SomeClass,int val)
..将扩展为:
int func_SomeClass(int val)
【讨论】: