我想拥有可以在C++和Lua中读/写的C++对象.
我看过:http://www.lua.org/pil/28.html
但是,我不喜欢这个解决方案,因为我的对象有构造函数和析构函数(并且它们很重要,因为我使用RAII并且它们负责引用计数).
在PIL解决方案中我不喜欢的是对象是在Lua的堆中分配的.
我想要的是自己创建hte C++对象,并且让lua有办法获取/设置它们.
有没有人有一个很好的教程/链接?
坦克!
一种选择是使用light userdata,它允许您在C++堆上分配对象.请参阅文档lua_pushlightuserdata.不幸的是,轻的用户数据没有元数据.即使你愿意使用Lua 函数访问它来获取/设置,你仍然需要做这样的事情:
static int myget(lua_State *L) {
myclass thing = lua_touserdata(L, 1);
lua_pushnumber(thing::getsize());
return 1;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,因为它是一个轻量级用户数据,所以没有真正的方法可以使这种操作类型安全 - 所有轻型用户数据都被视为相同,并且它们没有元数据.
更好的解决方案是在Lua堆上分配一个完整的用户数据,并使用适当的元表,其内容是指向在C++堆上分配的对象的单个指针.然后你可以按照Lua编程中的模型进行操作.例如,您可以查看Lua io库以了解如何FILE *处理.这样您就可以使用该luaL_checkudata函数编写C接口,并且它们是安全的,但您仍然有权在C++堆而不是Lua堆上分配对象.