c ++ classes&lua

ano*_*non 2 c++ lua

我想拥有可以在C++和Lua中读/写的C++对象.

我看过:http://www.lua.org/pil/28.html

但是,我不喜欢这个解决方案,因为我的对象有构造函数和析构函数(并且它们很重要,因为我使用RAII并且它们负责引用计数).

在PIL解决方案中我不喜欢的是对象是在Lua的堆中分配的.

我想要的是自己创建hte C++对象,并且让lua有办法获取/设置它们.

有没有人有一个很好的教程/链接?

坦克!

Nor*_*sey 6

一种选择是使用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堆上分配对象.