Lua 传递给 newlib 创建的函数处理器

我正在使用 luaL_newlib(luaState,afbFunction),其中 afbFunction 是一个静态的 luaL_Reg 数组。不幸的是,luaL_Reg 仅支持 namefunc 两个字段。因此,无法传递一个函数处理器并实现以下操作:

static const luaL_Reg afbFunction[] = {
    {"notice" , LuaPrintMsg, MSG_NOTICE},
    {"info"   , LuaPrintMsg, MSG_INFO},
    {"warning", LuaPrintWar, MSG_WARN},
    {NULL, NULL}  /* sentinel */
};

我有两个原因不能针对每个 Lua 函数拥有 C 入口点:

  1. 我有一个通用的包装器,用于处理从 Lua(表)到 C(jsonc)的输入/输出参数值的所有 C 函数。
  2. 与接口的 Lua 函数的数量来自于配置文件并且可以在不重新构建代码的情况下更改。长话短说,配置文件具有共享库路径,后跟要公开的函数列表。

是否有人有一个解决方案,可以为多个 Lua 函数具有唯一的 C 入口点?当使用 luaL_newlib() 时,C 函数作为第二个参数接收 lib 表,但似乎接收到完整的表而不是对应的条目,即使测试标签也不可能。

点赞