3

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

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

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

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

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

4

2 回答 2

11

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

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

有关更多信息,Lua 编程Lua 用户 Wiki都有简要说明。

于 2011-06-10T16:17:39.697 回答
1

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

哦,你不需要typedef structC++ 中的那些废话。你可以说

struct Foo {
    int x;
    int y;
};
于 2011-06-10T15:03:40.467 回答