超越luabind的luaBridge
2014-04-10 12:56
309 查看
此编是引用他人的文章,这里记录下,主要为以后自己查找方便,原文地址:http://www.cppblog.com/sunicdavy/archive/2013/12/07/204648.html
最近准备在手机项目客户端中使用lua, 以前一直在服务器使用luabind. 另外, tolua++也体验过, LuaPlus也在早年用过. 以下是本人对这些绑定库的个人感觉:
luabind
利用boost机制把绑定做到极致, 比较适合主c++, 弱lua的脚本框架.
作者已经停止更新, 在windows/linux编译没问题, 但是在ios的LLVM下, 无法编译
tolua++
像cocos2dx使用tolua++也是可以理解的, 那么多函数需要绑定, tolua++的头文件parse及自动代码生成节约了很多手动绑定的时间.
但是看到代码中有一部分bugfix就心存不安(纯个人感觉, 本人使用不多, 欢迎砖头伺候),另外, tolua++只能由脚本层驱动C++, 而没有将已经实例化的句柄注册到lua的功能也是煞笔啊
LuaPlus
接口较为简单, 适于初学者上手, 无任何的模板, 性能不高
luaBridge
项目地址: https://github.com/vinniefalco/LuaBridge
手册: http://vinniefalco.com/LuaBridge/Manual.html
纯头文件实现, 无需编译, 包含进入工程即可, 接口简洁高效
相比luabind, 唯一不能实现的常用功能就是枚举, 但是可以支持类成员静态变量注册, 这个就无所谓了, 手写一个枚举支持也很简单
看下演示代码:
最近准备在手机项目客户端中使用lua, 以前一直在服务器使用luabind. 另外, tolua++也体验过, LuaPlus也在早年用过. 以下是本人对这些绑定库的个人感觉:
luabind
利用boost机制把绑定做到极致, 比较适合主c++, 弱lua的脚本框架.
作者已经停止更新, 在windows/linux编译没问题, 但是在ios的LLVM下, 无法编译
tolua++
像cocos2dx使用tolua++也是可以理解的, 那么多函数需要绑定, tolua++的头文件parse及自动代码生成节约了很多手动绑定的时间.
但是看到代码中有一部分bugfix就心存不安(纯个人感觉, 本人使用不多, 欢迎砖头伺候),另外, tolua++只能由脚本层驱动C++, 而没有将已经实例化的句柄注册到lua的功能也是煞笔啊
LuaPlus
接口较为简单, 适于初学者上手, 无任何的模板, 性能不高
luaBridge
项目地址: https://github.com/vinniefalco/LuaBridge
手册: http://vinniefalco.com/LuaBridge/Manual.html
纯头文件实现, 无需编译, 包含进入工程即可, 接口简洁高效
相比luabind, 唯一不能实现的常用功能就是枚举, 但是可以支持类成员静态变量注册, 这个就无所谓了, 手写一个枚举支持也很简单
看下演示代码:
class A { public: A( ) { } virtual void foo( int a ) { printf("foo base\n"); } std::string Member; }; class B : public A { public: virtual void foo( int a ) { printf("foo inherited\n"); } };
void foo( int b ) { }
luabridge::getGlobalNamespace(L) .beginClass<A>("Sobj") .addConstructor<void (*) (void)> () .addFunction("foo", &A::foo) .addData("Member",&A::Member) .endClass() .deriveClass<B, A>("SSec") .addFunction("foo",&B::foo ) .endClass(); luabridge::getGlobalNamespace(L).addFunction("foo", foo ); B ins; ins.Member = "data"; luabridge::setGlobal(L, ins, "ins");
lua侧的代码 local a = Sobj() a:foo(2) a.Member = "hello" ins:foo(3)
相关文章推荐
- 超越luabind的luaBridge
- 目标锁定全球第一大高科技公司 惠普如何超越IT
- 超越阐释——技术文本的语言学解读
- 智能客户端(超越浏览器 迎接Smart Client)
- 超越竞争(4) 案例:豆瓣中国互联网的利基神话
- function.inc.php超越php
- [突发奇想]超越宝马之后
- 微软在动态语言支持上超越了Java?
- 程序员 :超越软件蓝领的七种武器
- 超越设计模式
- 超越 C++ 下一代 C++ — C++/CLI简介
- 万维网之父:谷歌搜索老大地位或被超越
- 搜狐超越新浪给创业者的两个启示:不断+耐心布局
- 超越创业初期的建议:助你的企业在规模和利润上都得到提升
- 宇宙存在三级量子--超越爱因斯坦
- 空杯心态-不断超越
- 最强的对手,不一定是别人,而可能是我们自己。在超越别人之前,先得超越自己!
- SXSW:超越聚合-发现最好的内容
- 欧洲创新发布混合地图,超越 Garmin和Google显示技术