从 Lua 脚本反射 Lua 桥接 类
Reflecting LuaBridge classes from Lua scripts
2019 年 4 月之前,Lua 脚本可以使用字符串键 __parent
、__class
、__propget
和 __propset
。这是一个非常有用的工具,可用于创建测试脚本和开发工具,以维护导出到 Lua.
的大型 class 框架。
通过查看 LuaBridge 的发行说明,似乎出于安全原因删除了字符串键。但我发现自己更重视从脚本中反映 classes 的能力,而不是脚本是否可以在对象模型中乱搞。特别是在开发模式下。
LuaBridge Reference Manual implies C/C++ 程序有一种公开元表的方法,但我一直无法弄清楚如何去做。我对 C 和 Lua(或 LuaBridge)之间的接口很陌生,所以我感到困惑并不奇怪。如果有人可以分享如何执行此操作的示例,我将不胜感激。
由于似乎没有人提出好的建议,我意识到我可以自己思考属性、方法和常量的 名称。出于我的目的,我真的不需要执行或访问它们。
因此,我没有在 LuaBridge
内部乱搞,而是向框架中的每个 class 添加了 __class
、__propget
和 __propset
静态属性。这些 return a table 使用 LuaBridge
支持的 std::map
实现。 tables simple 将名称作为键和一个虚拟值。
我发现的一个警告是,在使用 deriveClass
创建派生 class 时,您必须向派生 classes 添加静态属性。如果您稍后尝试添加它们(使用 beginClass
),LuaBridge
会抛出一个断言。
2019 年 4 月之前,Lua 脚本可以使用字符串键 __parent
、__class
、__propget
和 __propset
。这是一个非常有用的工具,可用于创建测试脚本和开发工具,以维护导出到 Lua.
通过查看 LuaBridge 的发行说明,似乎出于安全原因删除了字符串键。但我发现自己更重视从脚本中反映 classes 的能力,而不是脚本是否可以在对象模型中乱搞。特别是在开发模式下。
LuaBridge Reference Manual implies C/C++ 程序有一种公开元表的方法,但我一直无法弄清楚如何去做。我对 C 和 Lua(或 LuaBridge)之间的接口很陌生,所以我感到困惑并不奇怪。如果有人可以分享如何执行此操作的示例,我将不胜感激。
由于似乎没有人提出好的建议,我意识到我可以自己思考属性、方法和常量的 名称。出于我的目的,我真的不需要执行或访问它们。
因此,我没有在 LuaBridge
内部乱搞,而是向框架中的每个 class 添加了 __class
、__propget
和 __propset
静态属性。这些 return a table 使用 LuaBridge
支持的 std::map
实现。 tables simple 将名称作为键和一个虚拟值。
我发现的一个警告是,在使用 deriveClass
创建派生 class 时,您必须向派生 classes 添加静态属性。如果您稍后尝试添加它们(使用 beginClass
),LuaBridge
会抛出一个断言。