• <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++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(28)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            lua語言是一個(gè)非常好用的語言,一個(gè)特點(diǎn)是,非常輕量級(jí)。二個(gè)特點(diǎn)是,非容易擴(kuò)展。三個(gè)特點(diǎn)是,lua與C++互調(diào)非常容易。
            可以將一個(gè)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)
                    ];
            }
            下面兩個(gè),是調(diào)用lua的XAnsiString與XDateTime輸出的函數(shù)。這兩個(gè)函數(shù)在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));
            }
            下面,就是定義這些函數(shù)的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,就可以有了一個(gè)已經(jīng)擴(kuò)展了的lua語言運(yùn)營環(huán)境。
            int main(int argc, char * argv[])
            {
                lua_State 
            *= lua_open();    //初始化lua
                gL 
            = L;
                luaL_openlibs(L);    
            //載入所有l(wèi)ua標(biāo)準(zhǔn)庫
                luaL_dofile(L, 
            "add.lua");
                Init(L);
                
            string s;
                cout
            <<"lua>";
                
            while(getline(cin,s))    //從cin中讀入一行到s
                {
                    
            if( s == "exit()" ) 
                    {
                        break;
                    }
                    
            //載入s里的lua代碼后執(zhí)行
                    bool err 
            = luaL_loadbuffer(L, s.c_str(), s.length(),
                        
            "line") || lua_pcall(L, 000);
                    
            if(err)
                    {
                        
            //如果錯(cuò)誤,顯示
                        cerr 
            << lua_tostring(L, -1);
                        
            //彈出錯(cuò)誤信息所在的最上層棧
                        lua_pop(L, 
            1);
                        cout
            <<endl;
                    }
                    cout
            <<"lua>";
                }

                lua_close(L);
            //關(guān)閉
                return 
            0;
            }
            這里,使用luabind使用lua語言擴(kuò)展和C++相互調(diào)用,非常簡(jiǎn)單。
            posted on 2010-11-05 17:08 冬瓜 閱讀(1889) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 原創(chuàng)

            Feedback

            # re: 一個(gè)luabind簡(jiǎn)單類綁定 2010-11-07 17:22 expter
            下午用了原來LUABIND可以支持。  回復(fù)  更多評(píng)論
              

            国产∨亚洲V天堂无码久久久| 久久天天躁夜夜躁狠狠| 91麻精品国产91久久久久 | 久久综合给合久久狠狠狠97色69 | 亚洲精品乱码久久久久久蜜桃不卡| 久久久久久久久久久| aaa级精品久久久国产片| 无码乱码观看精品久久| 久久久久久无码Av成人影院| 久久久久久久亚洲精品| 久久国产亚洲高清观看| 一本综合久久国产二区| 7国产欧美日韩综合天堂中文久久久久| 亚洲欧美一区二区三区久久| 国产精品久久久久9999高清| 精品久久久无码21p发布| 国内精品久久久久久久久| 久久精品www人人爽人人| 伊人久久大香线蕉无码麻豆| 亚洲狠狠久久综合一区77777| 久久久久久久波多野结衣高潮| 国产高潮国产高潮久久久91| 精品久久8x国产免费观看| 99久久国产精品免费一区二区| 久久综合亚洲色HEZYO国产| 青青青青久久精品国产h| 久久超乳爆乳中文字幕| 狠狠综合久久AV一区二区三区 | 日韩人妻无码精品久久免费一| 久久成人18免费网站| 91精品婷婷国产综合久久| 久久久国产精品亚洲一区| 少妇高潮惨叫久久久久久| 亚洲伊人久久成综合人影院| 老司机午夜网站国内精品久久久久久久久 | 久久青草国产精品一区| 国产亚洲精品美女久久久| 久久精品九九亚洲精品| 久久不见久久见免费视频7| 国内精品伊人久久久久AV影院| 久久水蜜桃亚洲av无码精品麻豆|