假设我们有许多相同签名的 C 函数,我们想将它们注册到 Lua。例如,每个函数看起来像这样:
void foo(int n)
{
// do some work
}
我们可以通过以下方式注册它们:
int wrap_foo(Lua_State *l)
{
int x = lua_tonumber(l, 1);
foo(x);
return 0;
}
lua_pushcfunction(l, wrap_foo);
lua_setglobal(l, "foo");
问题是:如何实现以下功能以避免重复代码。
void register(Lua_State *l, const char *name, void (*f)(int));
可能,可以使用预处理器宏(仅限编译时)来完成。有没有更优雅的方式?我更喜欢没有任何外部绑定库的解决方案。