【发布时间】:2020-07-04 15:53:44
【问题描述】:
我正在尝试通过使用宏来消除一堆样板代码。
这是有效的。我可以替换:
int do_register_script(struct context *L)
{
method_type const _instance_methods[] = {
{"new", __new},
{"delete", __delete}
{NULL, NULL}
};
register_type(L, script, _instance_methods, 0);
return 1;
}
使用宏
#define do_register_type(name) \
int do_register_ ## name(struct context *L) \
{ \
method_type const _instance_methods[] = { \
{"new", __new}, \
{"delete", __delete}, \
{NULL, NULL} \
}; \
register_type(L, name, _instance_methods, 0); \
return 1; \
}
像这样:
do_register_type(script);
太完美了!
但我也有一些看起来像这样的:
int do_register_rectangle(struct context *L)
{
method_type const _instance_methods[] = {
{"new", __new},
{"delete", __delete},
{"area", area},
{"perimeter", perimeter}
{NULL, NULL}
};
register_type(L, rectangle, _instance_methods, 0);
return 1;
}
现在上面的宏不起作用了。
如何向宏添加另一个参数以支持此功能?
我使用的是 C,而不是 C++,所以没有模板。
更新:有时代码使用别名作为名称
{"area", area},
{"Area", area},
{"perimeter", perimeter}
{"Perimeter", perimeter}
【问题讨论】:
标签: c macros variadic-macros