• <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)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            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語言運營環(huán)境。
            int main(int argc, char * argv[])
            {
                lua_State 
            *= lua_open();    //初始化lua
                gL 
            = L;
                luaL_openlibs(L);    
            //載入所有l(wèi)ua標準庫
                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)
                    {
                        
            //如果錯誤,顯示
                        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 冬瓜 閱讀(1886) 評論(1)  編輯 收藏 引用 所屬分類: 原創(chuàng)

            Feedback

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

            午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲香蕉网久久综合影视 | 亚洲国产一成人久久精品 | 久久精品国产99久久久香蕉| 久久久精品无码专区不卡| 久久受www免费人成_看片中文| 久久久久久精品久久久久| WWW婷婷AV久久久影片| 久久综合视频网站| 久久婷婷五月综合97色一本一本 | 77777亚洲午夜久久多人| 国产三级久久久精品麻豆三级| 国产成人精品久久亚洲高清不卡| 久久涩综合| 精品久久人妻av中文字幕| 久久久久人妻一区精品果冻| 亚洲精品无码久久一线| 久久精品夜色噜噜亚洲A∨| 久久99国产综合精品| 久久这里都是精品| 久久人妻少妇嫩草AV无码蜜桃| 久久亚洲私人国产精品| 亚洲AV伊人久久青青草原| 一本久久a久久精品综合夜夜| 人人妻久久人人澡人人爽人人精品 | 亚洲一区二区三区日本久久九| 国产69精品久久久久9999APGF | 亚洲Av无码国产情品久久| 青青青伊人色综合久久| 久久久亚洲欧洲日产国码二区| 亚洲国产精品狼友中文久久久| 94久久国产乱子伦精品免费| 久久亚洲精品无码AV红樱桃| 三级三级久久三级久久| 久久久精品国产| 亚洲AV无码1区2区久久| 无码人妻久久一区二区三区| 久久久精品人妻一区二区三区蜜桃| 欧美亚洲另类久久综合婷婷| 午夜精品久久久久9999高清| 香蕉久久永久视频|