我可能误解了它们的使用或误读了文档,但是如何访问作为light userdata传递给Lua的结构或类的成员?例如,如果使用以下结构的向量
typedef struct Foo {
int x;
int y;
} Foo;
被声明为'test'并被定义为x = 413和y = 612,并且通过调用推送
lua_pushlightuserdata( L, (void *) &test ) ;
操作或打印x和y的函数的Lua代码是什么样的?
答案 0 :(得分:11)
Lua中的轻型用户数据只是一个指针。 Lua不了解如何读取指针引用的对象的内容。此数据的目的是允许一个C API调用将引用传递给另一个API调用。
如果你想在Lua中使用数据,你需要将它推入堆栈,在你的情况下我会把它变成一个表。如果您需要在C和Lua之间同步这些数据,那么您需要在两侧编写函数来处理赋值并将值复制到其他环境。另一种选择是只在Lua中拥有数据并在C语言中通过Lua API检索它,或者在C语言中将其保存并在Lua中通过C API(您将创建)检索它。
有关详细信息,Programming in Lua和Lua-users Wiki均有简要说明。
答案 1 :(得分:1)
无。您无法使用Lua访问任何类型的userdata或执行任何操作。您必须为所有操作提供C ++函数。当然,通过正确使用元函数可以使这更容易。
哦,你在C ++中不需要typedef struct
垃圾。你可以说
struct Foo {
int x;
int y;
};