• <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 冬瓜 閱讀(1889) 評論(1)  編輯 收藏 引用 所屬分類: 原創

            Feedback

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

            亚洲伊人久久成综合人影院 | 久久久www免费人成精品| 国内精品久久久久久久涩爱| 午夜精品久久久内射近拍高清| 7777精品伊人久久久大香线蕉| 亚洲综合日韩久久成人AV| 久久精品成人国产午夜| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久精品国产AV一区二区三区| AV无码久久久久不卡网站下载 | 久久久久久久精品妇女99| 色综合久久中文综合网| 亚洲综合日韩久久成人AV| 国内精品久久久久久不卡影院| 久久精品人成免费| 久久免费视频1| 久久精品中文字幕有码| 久久91精品国产91久久户| 热综合一本伊人久久精品| 一本色综合久久| 久久精品一区二区国产| 亚洲美日韩Av中文字幕无码久久久妻妇| 无码AV中文字幕久久专区| 日本高清无卡码一区二区久久| 久久精品成人免费看| 久久久av波多野一区二区| 久久香综合精品久久伊人| 久久亚洲中文字幕精品一区| 国产成人综合久久久久久| 好久久免费视频高清| 精品久久久久久无码专区不卡| 久久婷婷色综合一区二区| 性做久久久久久久久浪潮| 日韩美女18网站久久精品| 欧美午夜精品久久久久久浪潮| 久久婷婷五月综合色99啪ak| 久久99精品国产99久久6| 国内精品久久久久久不卡影院| 国产精品va久久久久久久| 欧美午夜A∨大片久久| 精品久久久久久国产牛牛app |