超越luabind的luaBridge

此编是引用他人的文章,这里记录下,主要为以后自己查找方便,原文地址: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, 唯一不能实现的常用功能就是枚举, 但是可以支持类成员静态变量注册, 这个就无所谓了, 手写一个枚举支持也很简单

看下演示代码:

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)
posted on 2014-04-10 12:56  share study 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/sharestudy/p/3656230.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Luabind是一个开源的C++库,用于绑定Lua脚本和C++代码。它使得在C++代码中调用Lua脚本变得更加容易。在Linux平台上安装Luabind库需要进行以下步骤: 1. 下载Luabind库 可以从Luabind的官方网站(http://luabind.sourceforge.net/)下载最新版本的Luabind库。下载后将文件解压缩到一个目录中。 2. 安装Lua库 在Linux系统上安装Luabind库之前,需要确保已经安装了Lua库。如果还没有安装Lua库,可以通过以下命令来安装: sudo apt-get install lua5.1 3. 安装boost库 Luabind库依赖于boost库,因此需要先安装boost库。可以通过以下命令来安装: sudo apt-get install libboost-all-dev 4. 编译和安装Luabind库 进入Luabind库的解压缩目录,然后执行以下命令: ./configure make sudo make install 执行完成后,Luabind库就已经安装完成了。 5. 测试Luabind库 可以通过以下步骤来测试Luabind库是否安装成功: 创建一个名为test.cpp的文件,包含以下代码: #include <iostream> #include <luabind/luabind.hpp> void hello() { std::cout << "Hello, world!" << std::endl; } int main() { lua_State* L = luaL_newstate(); luaL_openlibs(L); luabind::open(L); luabind::module(L) [ luabind::def("hello", &hello) ]; luaL_dostring(L, "hello()"); lua_close(L); return 0; } 编译test.cpp文件: g++ -o test test.cpp -lluabind -llua -lboost_system 运行test文件,如果输出“Hello, world!”则表示Luabind库已经安装成功。 注:以上命令可能需要root权限,如果遇到权限问题,可以在命令前加上sudo。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值