在不知道 userdata 实现的情况下,我可以从 C++ 内部使用它的字段吗?

Without knowing the userdata implementation, can I use its fields from inside C++?

我可以从我的 C++ 代码中获取用户数据。我想知道我是否可以将它转换为某些东西,这样我就可以取消引用它的字段并调用它的方法而无需通过 Lua.

换句话说:

获取到一个userdata,放到Lua栈中,如何取出来作为某个class的对象?我知道我感兴趣的所有字段和方法(它们的 Lua 名称),但不一定知道 userdata 底层实现提供的所有字段和方法。

有没有办法以某种方式创建一个可以知道每个成员的偏移量的接口?

我认为问题是,我如何知道用户数据的 Lua 视图中每个成员的偏移量,因此我可以创建一个结构来转换 [= 返回的 void * 11=]到?

Userdata 只是一个二进制 blob。字节数组。如何解释这些字节 - 完全取决于随该用户数据提供的接口,无论是方法元表,还是其他一些协议。

如果用户数据是由您的代码创建的,那么您要么知道那里有什么类型的本机对象(知道某些函数只生成或接受特定类型),要么您可以将类型标识符作为用户数据 blob 的第一个字节,所以你可以检查 id 和 switch/cast 用户数据指向特定 class.

的指针

如果用户数据是由某人的代码创建的 - 您只能依赖其元表中提供的方法(您可以从本机代码访问它),或者只是将其视为字节数组,而不知道存储的实际数据类型那里。或者做一些骇人听闻的猜测,让它在某些情况下工作,如果你的猜测不正确,就会严重崩溃。