Lua 脚本中反射 LuaBridge 类

在 2019 年 4 月之前,Lua 脚本可以使用字符串键 __parent__class__propget__propset 反射 LuaBridge 类的方法和属性。这是一个非常有用的工具,可以创建测试脚本和开发工具来维护导出到 Lua 的大型类框架。

从 LuaBridge 的发布说明中可以看出,由于安全原因,这些字符串键已被移除。但我发现,我更加重视从脚本中反射类的能力,而不是脚本是否可以混乱地操作对象模型。特别是在开发模式下。

LuaBridge 参考手册 暗示了 C/C++ 程序可以暴露元表的一种方式,但我还没有弄清楚如何做到。我对 Lua 和 LuaBridge 的接口很陌生,所以并不惊讶我感到困惑。如果有人可以分享如何做到这一点的示例,我会很感激。

原文链接 https://stackoverflow.com/questions/69571825

点赞
stackoverflow用户4183058
stackoverflow用户4183058

由于没有人提供好的建议,我意识到我可以自己实现对属性、方法和常量名称的反射。对于我的目的,我不需要执行或访问它们。

因此,我在我框架中的每个类中添加了__class__propget__propset静态属性,而不是在LuaBridge内部捣鼓。它们返回一个使用std::map实现的表,LuaBridge支持这种表。这些表只有名称作为键和一个虚拟值。

我发现的一个注意点是,在使用deriveClass创建派生类时,必须向该类添加静态属性。如果您尝试稍后添加它们(使用beginClass),LuaBridge会抛出断言错误。

2021-10-19 15:22:37