在Lua中访问轻量用户数据。

我可能误解了它们的使用方法或者误读了文档,但是如果我想访问作为轻量级用户数据传递给Lua的结构体或类的成员,我该怎么办呢?例如,如果使用以下结构体定义一个向量

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

并将其声明为'test',并定义为x = 413和y = 612,然后使用以下调用将其推入栈中

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

那么一个操作或打印x和y的Lua函数代码会是什么样子?

原文链接 https://stackoverflow.com/questions/6308135

点赞
stackoverflow用户298661
stackoverflow用户298661

Lua无法访问或处理任何类型的用户数据

Lua无法访问或处理任何类型的用户数据。您必须提供C++函数来进行所有操作。当然,通过正确使用元函数,可以使这个过程变得更容易。

另外,在C++中,您不需要typedef struct这种垃圾。您可以直接这样写:

struct Foo {
    int x;
    int y;
};
2011-06-10 15:03:40
stackoverflow用户596285
stackoverflow用户596285

Lua 中的轻量 userdata 只是一个指针。Lua 不知道如何读取由指针引用的对象的内容。这些数据的目的是允许一个 C API 调用将对另一个 API 调用的引用传递过去。

如果你想在 Lua 中使用数据,你需要将它推入到栈中,并在你的情况下将其作为表格。如果你需要在 C 和 Lua 之间同步这些数据,那么你将需要在两个环境中编写函数来处理分配并将值复制到另一个环境中。另一个选项是只将数据保存在 Lua 中,并在 C 中通过 Lua API 检索它,或者将数据保存在 C 中,并在 Lua 中通过你自己创建的 C API (可以在 Lua-users Wiki 上找到) 检索它。

更多信息,请参阅 Programming in LuaLua-users Wiki 的简要说明。

2011-06-10 16:17:39