**Lua 使用 C++ 为 userdata 添加实例字段**

我想在我的 Lua userdata 对象(来自 C++)中添加一些静态字段。这些对象是向量,它们在 C++ 中创建并可以正常使用。但是,当我尝试使用 lua_setfield 设置我的 userdata 时,我得到了一个 attempt to index a Vector value 错误,而且我不想使用.x(),.y(),.z(),因为需要调用函数、推入堆栈,然后在 Lua 端读取的成本过高。

有没有任何方法可以为 Lua 访问注册 userdata 的字段?

点赞
用户734069
用户734069

Userdata 没有“字段”。它可以拥有一个元表,你可以在元表中定义 __index__newindex 元方法。有了这样的元表,当从 userdata 中读取字段的值时,将调用前者函数,而当从外部赋值给字段时(ud.some_field = 4 或等效语句),将调用后者函数。如果你想让字段只读(到某种程度),你可以只实现 __index,这样用户尝试使用 __newindex 时会失败。

因此,在您的 C++ 代码中,在创建 userdata 之后,您可以使用 lua_setmetatable 为其分配一个表格,并在其中定义这些方法。当然,这些函数需要访问 userdata 中的实际 C++ 对象,并获取您感兴趣的特定值。

2020-03-02 20:45:07