在Lua中访问Light userdata

时间:2011-06-10 14:57:36

标签: c++ lua lua-userdata

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

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

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

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

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

2 个答案:

答案 0 :(得分:11)

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

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

有关详细信息,Programming in LuaLua-users Wiki均有简要说明。

答案 1 :(得分:1)

无。您无法使用Lua访问任何类型的userdata或执行任何操作。您必须为所有操作提供C ++函数。当然,通过正确使用元函数可以使这更容易。

哦,你在C ++中不需要typedef struct垃圾。你可以说

struct Foo {
    int x;
    int y;
};