在Lua中访问Light userdata

Luc*_*cas 2 c++ lua lua-userdata

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

typedef struct Foo {
  int x;
  int y;
} Foo;
Run Code Online (Sandbox Code Playgroud)

被声明为'test'并定义为x = 413和y = 612,并且通过调用推送

lua_pushlightuserdata( L, (void *) &test ) ;
Run Code Online (Sandbox Code Playgroud)

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

BMi*_*tch 11

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

如果你想在Lua中处理数据,你需要将它推入堆栈,在你的情况下我会把它变成一个表.如果您需要在C和Lua之间同步这些数据,那么您需要在两侧编写函数来处理赋值并将值复制到其他环境.另一个选择是只在Lua中拥有数据并在C语言中通过Lua API检索它,或者在C中使用Lua API并在Lua中通过C API(您将创建)检索它.

有关更多信息,Lua中的编程Lua-users Wiki均有简要说明.