[zz]LuaBridge簡介

最近準備在手機項目客戶端中使用lua, 之前一直在服務器使用luabind. 另外, tolua++也體驗過, LuaPlus也在早年用過. 如下是本人對這些綁定庫的我的感受:html

luabindlinux

利用boost機制把綁定作到極致, 比較適合主c++, 弱lua的腳本框架.ios

做者已經中止更新, 在windows/linux編譯沒問題, 可是在ios的LLVM下, 沒法編譯c++

tolua++git

像cocos2dx使用tolua++也是能夠理解的, 那麼多函數須要綁定, tolua++的頭文件parse及自動代碼生成節約了不少手動綁定的時間.github

可是看到代碼中有一部分bugfix就心存不安(純我的感受, 本人使用很少, 歡迎磚頭伺候),另外, tolua++只能由腳本層驅動C++, 而沒有將已經實例化的句柄註冊到lua的功能也是煞筆啊windows

 

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)

相關文章
相關標籤/搜索