Lua使用C ++向用户数据添加实例字段

问题描述 投票:1回答:1

我想向来自C ++的Lua用户数据对象添加一些静态字段。有问题的对象是向量,它们是在C ++领域中创建的,可以按原样工作,但是我在用户数据上尝试了lua_setfield,但是遇到了attempt to index a Vector value错误,我真的不想使用.x(), .y(), .z()由于必须调用一个函数,将其压入堆栈然后在Lua端进行读取而产生的成本。

是否有任何方法可以在用户数据上注册字段以进行Lua访问?

c++ lua
1个回答
0
投票

Userdata没有“字段”。它可以拥有的是一个元表,您可以为其定义__index__newindex元方法。给定这样的一个元表,在读取用户数据的字段值时调用前一个函数,而在从外部为字段分配值(ud.some_field = 4或等效值)时调用后一个函数。如果您希望字段是只读的(在某种程度上),则可以实现__index,并且用户尝试使用__newindex将会失败。

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

© www.soinside.com 2019 - 2024. All rights reserved.