在为C++类创建Lua绑定时,我应该返回表还是userdata对象?
有谁知道每种方法的优缺点?
我建议返回userdata.无论采用何种方法,都必须在某处将指针指向C++数据或实际的C++数据本身,并且使用表格无处可行.
返回表在某些情况下是有意义的,因为它们可以在Lua中使用额外的属性进行"注释",而无需为了支持这一点而做任何额外的操作.不幸的是,C++对象指针必须到达某个地方,并且除了表本身中的实际条目之外,它无处可去.
这不是一个非常安全的地方.它可以通过Lua代码找到,并删除或替换.这可能是偶然的,或者是故意的,这并不重要.
因此,我倾向于返回userdata对象.它们可以做出像表工作,如果人真的必须坚持在这一点,但他们也有一个"秘密"区域(实际用户数据本身),其中C++对象的指针可以存储,从Lua代码重写安全.
(使用用户数据对象也有一个"环境"指针,它是用于存储特定于对象的数据的另一地方.由于与用户数据有效载荷本身,此值是不可访问的Lua代码,并且可以不被损坏的方式.)