从Lua中包装userdata的SWIG代码

我正在使用 swig-lua。我有一个在 Lua 中调用的函数,它会返回一个指针(userdata)。现在我知道这个指针是什么,但我如何告诉 Lua 在 Lua 内部?

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

点赞
stackoverflow用户1491
stackoverflow用户1491

根据Lua参考手册的说明:

setmetatable (table, metatable)

为给定的table设置元表。 (您不能从Lua更改其他类型的元表,只能从C中更改。)

在Lua中,您无法“告诉Lua”userdata是什么。必须使用metatable或通过使用C API进行绑定函数调用来操作。有关详细信息,请参见《编写Lua程序(Programming in Lua, Pil)》第28.1章

2010-05-18 12:18:27
stackoverflow用户298661
stackoverflow用户298661

userdata 的定义非常明确:Lua 不知道、不能知道,并且也不想知道它是什么。它是你的数据,它是什么由你自己来解决。如果你想操作它,那么你必须使用 C 函数调用它(可以通过设置元表来进行操作符重载)。

2010-05-18 13:06:25
stackoverflow用户68204
stackoverflow用户68204

告诉 SWIG 有关 void 指针所指向的数据类型。如果 SWIG 知道该类型,则会将其作为 userdata 传递给 Lua,附加适当的元表,使 Lua 面可以访问和修改个别数据字段(如果是一个类,还可以调用其方法)。

这可能意味着需要告诉 SWIG 一些其他库不需要的数据类型,但从长远来看值得努力。

Lua 所知道的 userdata 类型都包含在其元表中。如果两个 userdata 值具有相同的元表,则它们是同一类型。该元表负责介入 Lua side 对其内容的所有访问,并且通常由在 C 中实现的方法组成,以便可以这样做。如果没有这样的元表,则 Lua 端只能将 userdata 视为不透明的 blob。

2010-05-18 20:33:00