Lua绑定:table vs userdata

时间:2009-09-16 18:57:41

标签: binding lua lua-table lua-userdata

在为C ++类创建Lua绑定时,我应该返回表还是userdata对象?

有没有人知道每种方法的优缺点?

1 个答案:

答案 0 :(得分:6)

我建议您返回userdata。无论采用何种方法,都必须在某处放置指针 到C ++数据,或实际的C ++数据本身,并没有任何地方 用桌子安全地做到这一点。

在某些情况下,返回表是有意义的,因为它们可以 在Lua中用一些额外的属性进行“注释”而无需做任何事情 任何额外的东西支持这个。不幸的是C ++对象指针 必须到某个地方去,其他地方无处可去 而不是表格中的实际条目。

这不是一个非常安全的地方。它可以通过Lua找到 代码,删除或替换。这可能是偶然的,或者是偶然的 目的,这并不重要。

因此,我倾向于返回userdata对象。他们可以 如果一个人真的必须坚持,那就像桌子一样工作,但他们 还有一个“秘密”区域(实际的userdata本身)所在的C ++ 可以存储对象指针,不会被Lua代码覆盖。

(Userdata对象也有一个“环境”指针,这是另一个 用于存储特定于对象的数据的位置。与userdata有效负载一样 本身,这个值是Lua代码无法访问的,不能被破坏 那样。)