所有的调用都是封装成Command来执行的, 并不像LuaBind那样直接绑定到C++类对象; 而且, 对于C++调用脚本的接口也不是很方便, 只有一个Eval()来执行一个字符串. 当然, 对于需求更高的用户来说, 可以选择使用LuaBind等第三方库来整合脚本系统. Command(命令) 可以这么说, 脚本中调用的, 都是一个个的Command. Nebula3里已经实现了一个LuaServer, 不过个感觉没有LuaBind方便. 所有的脚本执行都是通过LuaServer::Eval(const String& str)来完成的.
我搜到过一篇文章关于LuaBind使用Boost Build管理工具来管理源代码以及编译的博文,其第一句话就是Fuck The Boost!it is the pain of ass! 那个采用Boost Build来编译LuaBind我最后完成了,但是很是蛋疼。 现在又出现了Boost链接的问题,经过多方搜索,以及尝试。
从上面提到的4个库的实现方式上来看, 除tolua++外的luabind, luatinker, luabridge, 它们的实现都会依赖C++模板来完成函数向lua c function的转换, 细节可参考 Lura的前世 - 从过往说起 2.1 过往使用的lua bridge实现 lua的bridge层实现特别多, 就我自己用过的也不少, 下面仅列出个人有在实际项目中使用过的: luabind: 依赖 boost的一个lua实现, 当时应该是各种特性提供的最多的lua bridge. luatinker: 对比luabind简化了支持的特性, 同时也完全不依赖boost库. tolua++: Cocos2dx 这里也不详细赘述了. 2.2 实践总结 上面列举的这些库, 优点还是挺明显的: - 功能特性齐全, 基本都覆盖了上面说到的bridge核心功能 - 配合自带或者项目自己维护的导出器, 日常维护使用便利 - 除luabind
中再做一次extern声明 这个看看能不能做自动生成的, 要不然每次改动两边都要改多不爽 C++调脚本是通过Mono提供的一系列API来完成的, 如mono_runtime_invoke 另外有个类似luabind
缺点是粘合层的代码现在没有比较好的自动生成方案, 只有一个类似luabind的monobind, 但是C#那边还是要声明一遍.
从上面提到的4个库的实现方式上来看,除tolua++外的luabind,luatinker,luabridge,它们的实现都会依赖C++模板来完成函数向lua c function的转换,细节可参考第三篇 二、Lura的前世-从过往说起 (一)过往使用的lua bridge实现 lua的bridge层实现特别多,就我自己用过的也不少,下面仅列出个人有在实际项目中使用过的: luabind: 依赖boost luatinker: 对比luabind简化了支持的特性,同时也完全不依赖boost库。 除luabind外核心代码都比较简洁, 调整难度不高。 C++与Lua的边界明确, 便于添加Debug和Profiler等功能。 基于这些库实现一些复杂特性成本可空, 可以比较好的适配特定需求。
从上面提到的4个库的实现方式上来看, 除tolua++外的luabind, luatinker, luabridge, 它们的实现都会依赖C++模板来完成函数向lua c function的转换, 细节可参考 Lura的前世 - 从过往说起 2.1 过往使用的lua bridge实现 lua的bridge层实现特别多, 就我自己用过的也不少, 下面仅列出个人有在实际项目中使用过的: luabind: 依赖 boost的一个lua实现, 当时应该是各种特性提供的最多的lua bridge. luatinker: 对比luabind简化了支持的特性, 同时也完全不依赖boost库. tolua++: Cocos2dx 这里也不详细赘述了. 2.2 实践总结 上面列举的这些库, 优点还是挺明显的: - 功能特性齐全, 基本都覆盖了上面说到的bridge核心功能 - 配合自带或者项目自己维护的导出器, 日常维护使用便利 - 除luabind
缺点是粘合层的代码现在没有比较好的自动生成方案, 只有一个类似luabind的monobind, 但是C#那边还是要声明一遍.
) -- 输出 DerivedClass2.从C/C++的交互层面进行Lua Class实现从C/C++层面去实现也是要借助元表的形式,如果使用了依附于 Lua 绑定库(如 sol2、tolua++、luabind
我花了三周的时间将LUA引擎做了封装,可以无缝的在C++中调用LUA代码,同时将C++类可以很轻松的注册到LUA中,使用了C++的模板实现了tolua++、luabind的功能。
九、小结 其实系统的了解后会发现,随着C++本身的迭代,像反射这种轮子,开发难度变得越来越简单,对比C++98年代的luabind,cpp-framework中的反射实现代码已经很精简了,而且我们也能发现功能更强大
小结 其实系统的了解后会发现, 随着C++本身的迭代, 像反射这种轮子, 开发难度变得越来越简单, 对比C++98年代的luabind, cpp-framework中的反射实现代码已经很精简了, 而且我们也能发现功能更强大