• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            專職C++

            不能停止的腳步

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(28)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            lua語言是一個非常好用的語言,一個特點是,非常輕量級。二個特點是,非容易擴展。三個特點是,lua與C++互調非常容易。
            可以將一個C++中類的大部分方法,都可以綁定成lua語言的一部分。
            下面的代碼,是綁定我的庫中DatetTime類的代碼:
             1void InitDateTime(lua_State * L)
             2{
             3    using namespace luabind;
             4    module(L,"zdh")
             5        [
             6            class_<XDate<XAnsiString> >("XDate")
             7            .def(constructor<XInt,XInt,XInt>())
             8            .def(constructor<>())
             9            .def(constructor<XInt>())
            10            .def(constructor<const XDate<XAnsiString> &>())
            11            .def("SetNowDate",&XDate<XAnsiString>::SetNowDate)
            12            .def("GetDay",&XDate<XAnsiString>::getDay)
            13            .def("GetMonth",&XDate<XAnsiString>::getMonth)
            14            .def("GetYear",&XDate<XAnsiString>::getYear)
            15            .def("SetDate",(void (XDate<XAnsiString>::*)(zdh::XInt,zdh::XInt,zdh::XInt))&XDate<XAnsiString>::SetDate)
            16            .def("SetDate",(void (XDate<XAnsiString>::*)(zdh::XInt))&XDate<XAnsiString>::SetDate)
            17            .def("SetDate",(void (XDate<XAnsiString>::*)(const zdh::XDate<XAnsiString> &))&XDate<XAnsiString>::SetDate)
            18            .def("ToString",(zdh::XAnsiString (XDate<XAnsiString>::*)(voidconst)&XDate<XAnsiString>::ToString)
            19            .def(self == XDate<XAnsiString>())
            20            .def(self < XDate<XAnsiString>())
            21            .def(self<=XDate<XAnsiString>())
            22        ];
            23    //(return_arg-type (classname::*)(arg1-type,grg2-type,))&classname::class_memberfunction
            24    //(void(CBase::*)(long))&CBase::Show)
            25}
            下面是綁定我的庫中字符串的代碼
            void InitString(lua_State * L)
            {
                
            using namespace luabind;
                module(L,
            "zdh")
                    [
                        class_
            <XAnsiString>("XString")
                        .def(constructor
            <const XChar *>())
                        .def(constructor
            <>())
                        .def(constructor
            <const XAnsiString &>())
                        .def(
            "c_str",(const zdh::XChar * (XAnsiString::*)(voidconst)&XAnsiString::c_str)
                        .def(
            "getLength",(zdh::XInt (XAnsiString::*)(voidconst)&XAnsiString::getLength)
                        .def(
            "Trim",(zdh::XAnsiString (XAnsiString::*)(voidconst&XAnsiString::Trim)
                        .def(
            "Trim",(zdh::XAnsiString & (XAnsiString::*)(zdh::XAnsiString &const)&XAnsiString::Trim)
                    ];
            }
            下面兩個,是調用lua的XAnsiString與XDateTime輸出的函數。這兩個函數在lua中有定義。
            void PrintString(const XAnsiString & paramStr)
            {
                luabind::call_function
            <void>(gL,"printstring",boost::ref(paramStr));
            }
            void PrintDate(const XDate<XAnsiString> & paramDate)
            {
                luabind::call_function
            <void>(gL,"printdate",boost::ref(paramDate));
            }
            下面,就是定義這些函數的lua語言代碼
            ----fun.lua--------
            function addint ( x, y )
                
            local r = (x + y) * 10
                return r
            end
            function printstring(s)
                print(s:c_str())
            end
            function printdate(d)
                printstring(d:ToString())
            end
            然后,主要使用下面的main,就可以有了一個已經擴展了的lua語言運營環境。
            int main(int argc, char * argv[])
            {
                lua_State 
            *= lua_open();    //初始化lua
                gL 
            = L;
                luaL_openlibs(L);    
            //載入所有lua標準庫
                luaL_dofile(L, 
            "add.lua");
                Init(L);
                
            string s;
                cout
            <<"lua>";
                
            while(getline(cin,s))    //從cin中讀入一行到s
                {
                    
            if( s == "exit()" ) 
                    {
                        break;
                    }
                    
            //載入s里的lua代碼后執行
                    bool err 
            = luaL_loadbuffer(L, s.c_str(), s.length(),
                        
            "line") || lua_pcall(L, 000);
                    
            if(err)
                    {
                        
            //如果錯誤,顯示
                        cerr 
            << lua_tostring(L, -1);
                        
            //彈出錯誤信息所在的最上層棧
                        lua_pop(L, 
            1);
                        cout
            <<endl;
                    }
                    cout
            <<"lua>";
                }

                lua_close(L);
            //關閉
                return 
            0;
            }
            這里,使用luabind使用lua語言擴展和C++相互調用,非常簡單。
            posted on 2010-11-05 17:08 冬瓜 閱讀(1887) 評論(1)  編輯 收藏 引用 所屬分類: 原創

            Feedback

            # re: 一個luabind簡單類綁定 2010-11-07 17:22 expter
            下午用了原來LUABIND可以支持。  回復  更多評論
              

            久久无码人妻一区二区三区| 国产精品久久婷婷六月丁香| 精品久久久久久无码专区不卡| 国产精品久久久久久福利漫画| 久久久九九有精品国产| 国产呻吟久久久久久久92| 欧美午夜A∨大片久久 | 亚洲国产高清精品线久久| 久久人妻AV中文字幕| 久久国产高清字幕中文| 欧美日韩精品久久久久| 国产精品成人99久久久久| 久久久久亚洲av无码专区喷水 | 国产69精品久久久久观看软件| 久久综合香蕉国产蜜臀AV| 久久强奷乱码老熟女| 国产亚洲综合久久系列| 狠狠色婷婷久久综合频道日韩| 99久久亚洲综合精品成人| 久久丫精品国产亚洲av不卡 | 国内精品久久久久影院优| 婷婷久久五月天| 热久久最新网站获取| 久久夜色撩人精品国产小说| 久久精品国产秦先生| 粉嫩小泬无遮挡久久久久久| 77777亚洲午夜久久多人| 国内精品伊人久久久久777| 久久无码人妻精品一区二区三区 | 一本一本久久aa综合精品| 色播久久人人爽人人爽人人片aV | 国产精品久久久久久福利69堂| 少妇高潮惨叫久久久久久| 久久久久久伊人高潮影院 | 99久久国产热无码精品免费| 一本久道久久综合狠狠爱| 精品久久久中文字幕人妻| 亚洲国产精品久久电影欧美| 久久中文字幕人妻熟av女| 亚洲精品无码久久久久久| 午夜天堂av天堂久久久|