LuaBridge介绍 LuaBridge 是一个简单好用的轻量级且无依赖的库,用于在C ++和 LUA(一种强大,快速,轻量级,可嵌入的脚本语言)之间来回映射数据,函数和类。 github地址: https://github.com/vinniefalco/LuaBridge https://github.com/kunitoki/LuaBridge3 为什么使用Lua 实现业务的热更新 LuaBridge环境准备 luaBridge的使用简单,只需要把luaBridge的一堆头文件目录拷贝进项目包含进去使用。 但是需要提前准备好lua.lib,项目打包生成可执行exe时需要链接它。 编译lua.lib的方法: 进入luaBridge的项目源码中的LuaBridge\Tests\Lua文件夹,里面已经包含了lua的源代码,只需要编译为链接库即可。 LuaBridge简单示例 新建项目文件夹testlua,把luaBridge的文件夹拷贝进去。
从上面提到的4个库的实现方式上来看, 除tolua++外的luabind, luatinker, luabridge, 它们的实现都会依赖C++模板来完成函数向lua c function的转换, 细节可参考 相关的成员变量获取和成员函数的调用, 都依托于反射本身的实现, 这里不一一展开了. 3.1.4 拾遗 - 与luabridge实现的简单对比 这个地方的meta table对比LuaBridge库的实现做了大量的简化 , LuaBridge的实现之前有同事做了相关的分析, 整整用了4张纸, 这里就不额外贴了. luabridge的实现很精细的对c++类的各种成员进行了分类处理, 不一定能带来多少性能提升, 但肉眼可见的导致整个处理机制复杂, 难于维护, 相关机制定制异常的麻烦. 参考 github ponder库 luabridge库
luabridge: 某项目框架之前用到的一个lua bridge实现,有挺多优点,配合基于libclang实现的导出器,能够很好的完成bridge的工作。 对象的生命周期问题也从原来Luabridge没有很好解决的状况下拖到了更麻烦的情况。 导出工具的分裂 类似的事情,重复进行,而且特性之间无法共享,需要各个地方单独实现。 拾遗-与luabridge实现的简单对比 这个地方的meta table对比LuaBridge库的实现做了大量的简化,LuaBridge的实现之前有其他研究者整整用了4张纸做了相关的分析。 luabridge的实现很精细的对c++类的各种成员进行了分类处理,不一定能带来多少性能提升,但肉眼可见的导致整个处理机制复杂,难于维护,相关机制定制异常的麻烦。 参考资料: 1.github ponder库 2.luabridge库 作者简介 沈芳 腾讯后台开发工程师 IEG研发效能部开发人员,毕业于华中科技大学。
从上面提到的4个库的实现方式上来看, 除tolua++外的luabind, luatinker, luabridge, 它们的实现都会依赖C++模板来完成函数向lua c function的转换, 细节可参考 相关的成员变量获取和成员函数的调用, 都依托于反射本身的实现, 这里不一一展开了. 3.1.4 拾遗 - 与luabridge实现的简单对比 这个地方的meta table对比LuaBridge库的实现做了大量的简化 , LuaBridge的实现之前有同事做了相关的分析, 整整用了4张纸, 这里就不额外贴了. luabridge的实现很精细的对c++类的各种成员进行了分类处理, 不一定能带来多少性能提升, 但肉眼可见的导致整个处理机制复杂, 难于维护, 相关机制定制异常的麻烦. 参考 github ponder库 luabridge库
脚本绑定(拓展)可使用 Lua / Python 绑定脚本接口: LuaBridge Sol2 Pybind11 十、引擎模块之间的通信1.
即便如此,本来的第一选择是去找了个好像叫LuaBridge的项目。但是使用的时候发现,一是并不是很方便,另外就是也适配的不好,所以索性自己搞一个算了。
后续以此为基础支持像: LuaBridge的代码自动生成 反射信息的生成 基于反射的Lua信息的生成等都比较简单,像后续因为实际需要扩展出的c++ meta attribute支持,在这个分层的架构中也很容易实现
后续以此为基础支持像: - LuaBridge的代码自动生成 - 反射信息的生成 - 基于反射的Lua信息的生成 等都比较简单, 像后续因为实际需要扩展出的c++ meta attribute支持, 在这个分层的架构中也很容易实现
LuaBridge: 轻量级、无依赖的库,用于将Lua绑定到C++。 luacxx: 用于创建Lua绑定的C++ 11 API。