c++ - 在 Lua 中访问 Light 用户数据

标签 c++ lua lua-userdata

我可能误解了它们的使用或误读了文档,但我如何访问作为轻量用户数据传递给 Lua 的结构或类的成员?例如,如果一个 vector 使用以下结构

typedef struct Foo {
  int x;
  int y;
} Foo;

被声明为“测试”并定义为类似 x = 413 和 y = 612 的内容,并通过调用推送

lua_pushlightuserdata( L, (void *) &test ) ;

操作或打印 x 和 y 的函数的 Lua 代码是什么样的?

最佳答案

Lua 中的Light userdata 只是一个指针。 Lua 不理解如何读取指针引用的对象的内容。此数据的目的是允许一个 C API 调用将引用传递给另一个 API 调用。

如果你想在 Lua 中处理数据,你需要将它压入栈中,在你的情况下我会把它做成一个表。如果您需要在 C 和 Lua 之间同步此数据,那么您需要在双方编写函数来处理分配并将值复制到其他环境。另一种选择是仅将数据保存在 Lua 中并在 C 中通过 Lua API 检索它,或者将其保存在 C 中并在 Lua 中通过(您将创建的)C API 检索它。

欲了解更多信息,Programming in LuaLua-users Wiki每个都有简短的描述。

关于c++ - 在 Lua 中访问 Light 用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6308135/

相关文章:

c++ - std::stringstream 运算符 << 使用 strcat 吗?

c++ - 为什么这个enable_if函数模板不能专用于VS2017?

lua - FireBase API 是否有未缩小的 JavaScript 版本?

c++ - ./lua/addtest.lua :9: attempt to index local 'testobj' (a userdata value)]]

c++ - 使用 luaL_ref 获取对表中用户数据的引用?

c++ - C++ 中复制对象的动态绑定(bind)

c++ - 如何在模板中调用类型的析构函数?

c - 在 C 中重新分配/调整 Lua 5.1 用户数据的大小

lua - Lua 中涉及字符串比较的奇怪错误

c++ - Lua 用户数据对象管理