Lua 5.3注册C++类相关API

int luaL_newmetatable (lua_State *L, const char *tname);

如果注册表中不存在名为tname的表,则在注册表中创建一个名为tname的表,并将这个表压栈,返回值为1;

如果注册表中已存在名为tname的表,则直接将这个表压栈,返回值为0。

void luaL_requiref (lua_State *L, const char *modname, lua_CFunction openf, int glb);

如果modname在package.loaded中不存在,则调用openf,并以字符串modname作为实参,然后将结果保存在package.loaded[modname]中,和Lua脚本中require函数的功能类似;

如果glb为true,那么也会将结果保存到全局变量modname中。

这个函数会在堆栈上保留一个module的副本。

* 类的名字和模块的名字可以是不同的。

通俗地说,类的表存储在注册表中,而模块的表存在package.loaded中。

如果需要把类注册到模块中,需要把类的表作为一个元素设置到模块的表中,这时需要用一个名字来索引模块表中的类表。

类的表在注册表中不需要一定使用字符串来做索引,也可以使用Light Userdata和引用机制。

原文地址:https://www.cnblogs.com/lilei9110/p/7183893.html