3

在为 C++ 类进行 Lua 绑定时,我应该返回表还是用户数据对象?

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

4

1 回答 1

6

我建议返回用户数据。无论采用哪种方法,都必须在某个地方放置指向 C++ 数据或实际 C++ 数据本身的指针,而使用表来执行此操作是不安全的。

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

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

因此,我的偏好是返回 userdata 对象。如果真的必须坚持的话,它们可以像表格一样工作,但它们也有一个“秘密”区域(实际的用户数据本身)可以存储 C++ 对象指针,避免被 Lua 代码覆盖。

(Userdata 对象也有一个“环境”指针,它是存储对象特定数据的另一个地方。与 userdata 有效负载本身一样,Lua 代码无法访问此值,并且不能以这种方式损坏。)

于 2009-09-16T22:29:48.200 回答