婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Lua教程(三):C語言、C++中調(diào)用Lua的Table示例

Lua教程(三):C語言、C++中調(diào)用Lua的Table示例

熱門標(biāo)簽:上海企業(yè)外呼系統(tǒng)排名 智能語音電銷的機器人 武漢百應(yīng)人工智能電銷機器人 百度地圖標(biāo)注位置網(wǎng)站 400手機電話免費辦理 揚州電銷外呼系統(tǒng)軟件 電腦外呼系統(tǒng)輻射大嗎 開通400電話申請流程 如何利用高德地圖標(biāo)注家

從寫上一篇Lua的文章到現(xiàn)在,已經(jīng)過去半月有余了,是時候讓自己的Lua狀態(tài)refresh一下了。本教程將介紹Lua的棧及基本棧操作,同時還有如何在C/C++代碼里面讀取Lua的Table。

理解Lua棧

Lua通過一個“虛擬棧”與C/C++程序進行數(shù)據(jù)交互,所有的Lua C API都是通過操作這個棧來完成相應(yīng)的數(shù)據(jù)通信。 Lua的這個“虛擬棧”解決了C/C++程序與Lua程序通信的兩大問題:

1.Lua使用垃圾回收,而C/C++需要手動管理內(nèi)存。

2.Lua使用動態(tài)類型,而C/C++使用的是靜態(tài)類型。

因為這個棧在Lua虛擬機內(nèi)部,當(dāng)一個Lua的變量放在棧里面的時候,虛擬機可以知道它有沒有被宿主程序所使用,從而決定是否采用GC。另外Lua采用結(jié)構(gòu)體封裝了類似“Lua_Value”的類型,讓它可以存儲任何C的類型。從而在數(shù)據(jù)交換的時候,任何類型都可以被放入棧的一個slot中。

由于棧是FILO的,所以,當(dāng)我們在Lua里面操作這個棧的時候,每次操作的都是棧的頂部。而Lua的C API則有更多的控制權(quán),它可以非常靈活地操縱這個棧的任意位置的元素。

基本Lua棧操作

1.往棧里面壓入一個值

復(fù)制代碼 代碼如下:

void lua_pushnil      (lua_State *L);
void lua_pushboolean  (lua_State *L, int bool);
void lua_pushnumber   (lua_State *L, lua_Number n);
void lua_pushinteger  (lua_State *L, lua_Integer n);
void lua_pushunsigned (lua_State *L, lua_Unsigned n);
void lua_pushlstring  (lua_State *L, const char *s, size_t len);
void lua_pushstring   (lua_State *L, const char *s);

2.查詢棧里面的元素

復(fù)制代碼 代碼如下:

int lua_is* (lua_State * L, int index);

這里面的*可以是boolean,nil,string,function等等

3.獲取棧內(nèi)給定位置的元素值

復(fù)制代碼 代碼如下:

xxx lua_toXXX(lua_State * L, int index);

這里面的xxx可以是nil, boolean, string,integer等等。

4.其它棧操作

復(fù)制代碼 代碼如下:

//取得棧中元素個數(shù)
 int  lua_gettop    (lua_State *L);
//設(shè)置棧的大小為一個指定的值,而lua_settop(L,0)會把當(dāng)前棧清空
//如果指定的index大于之前棧的大小,那么空余的空間會被nil填充
//如果index小于之前的棧中元素個數(shù),則多余的元素會被丟棄
 void lua_settop    (lua_State *L, int index);
//把棧中index所在位置的元素壓入棧
 void lua_pushvalue (lua_State *L, int index);
//移除棧中index所在位置的元素
void lua_remove(lua_State *L, int index);
//在棧的頂部的元素移動至index處
void lua_insert(lua_State *L, int index);
//從棧頂彈出一個值,并把它設(shè)置到給定的index處
void lua_replace(lua_State *L, int index);
//把fromidx處的元素copy一份插入到toidx,這操作不會修改fromidx處的元素
void lua_copy(lua_State *L, int fromidx, int toidx);

另外,根據(jù)《Programming In Lua》一書中的所講,我們可以定義一個函數(shù)stackDump來打印當(dāng)前棧的情況:

復(fù)制代碼 代碼如下:

static void stackDump(lua_State* L){
    cout"\nbegin dump lua stack"endl;
    int i = 0;
    int top = lua_gettop(L);
    for (i = 1; i = top; ++i) {
        int t = lua_type(L, i);
        switch (t) {
            case LUA_TSTRING:
            {
                printf("'%s' ", lua_tostring(L, i));
            }
                break;
            case LUA_TBOOLEAN:
            {
                printf(lua_toboolean(L, i) ? "true " : "false ");
            }break;
            case LUA_TNUMBER:
            {
                printf("%g ", lua_tonumber(L, i));
            }
                break;
            default:
            {
                printf("%s ", lua_typename(L, t));
            }
                break;
        }
    }
    cout"\nend dump lua stack"endl;
}

C/C++訪問Lua的Table

假設(shè)我們的Lua文件中有一個Table為:

復(fù)制代碼 代碼如下:

me = { name = "zilongshanren", age = 27}

我們可以通過以下C代碼來訪問它的元素:

復(fù)制代碼 代碼如下:

//從Lua里面取得me這個table,并壓入棧
lua_getglobal(L, "me");
if (!lua_istable(L, -1)) {
    CCLOG("error! me is not a table");
}
//往棧里面壓入一個key:name
lua_pushstring(L, "name");
//取得-2位置的table,然后把棧頂元素彈出,取出table[name]的值并壓入棧
lua_gettable(L, -2);
//輸出棧頂?shù)膎ame
CCLOG("name = %s", lua_tostring(L, -1));
stackDump(L);
//把棧頂元素彈出去
lua_pop(L, 1);
//壓入另一個key:age
lua_pushstring(L, "age");
   //取出-2位置的table,把table[age]的值壓入棧
lua_gettable(L, -2);
stackDump(L);
CCLOG("age = %td", lua_tointeger(L, -1));

Lua5.1還引入了一個新方法:
復(fù)制代碼 代碼如下:

lua_getfield(L, -1, "age");

它可以取代

復(fù)制代碼 代碼如下:

 //壓入另一個key:age
    lua_pushstring(L, "age");
   //取出-2位置的table,把table[age]的值壓入棧
    lua_gettable(L, -2);

下篇文章,我們將介紹Lua如何調(diào)用C/C++里面的函數(shù)。

您可能感興趣的文章:
  • c++中explicit與mutable關(guān)鍵字的深入探究
  • C++中const、volatile、mutable使用方法小結(jié)
  • C++中mutable與volatile的深入理解
  • 淺談C++中的mutable和volatile關(guān)鍵字
  • C++中MFC Tab Control控件的使用詳解
  • C++遍歷Lua table的方法實例
  • c++遍歷lua table示例
  • 深入解析C++中的mutable關(guān)鍵字
  • c++關(guān)鍵字mutable深入解析
  • C++解析特殊符號tab和換行符號詳情

標(biāo)簽:延邊 張掖 黑龍江 新余 嘉峪關(guān) 武漢 江西 宜賓

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua教程(三):C語言、C++中調(diào)用Lua的Table示例》,本文關(guān)鍵詞  Lua,教程,三,語言,C++,中,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Lua教程(三):C語言、C++中調(diào)用Lua的Table示例》相關(guān)的同類信息!
  • 本頁收集關(guān)于Lua教程(三):C語言、C++中調(diào)用Lua的Table示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    菠萝蜜视频在线观看一区| 欧美成人video| 国产成人午夜片在线观看高清观看| 国产成人日日夜夜| 欧美一区二区三区视频| 国产精品福利一区| 精品一区二区三区在线观看国产| 日韩色在线观看| 精品一区二区三区视频| 欧美精品黑人性xxxx| 日本欧美加勒比视频| 欧美另类变人与禽xxxxx| 麻豆久久一区二区| 精品久久久久久无| 国产一区二区成人久久免费影院| 欧美精品一区二区在线观看| 丰满白嫩尤物一区二区| 亚洲精品国产高清久久伦理二区| 欧美色区777第一页| 美女网站色91| 中国av一区二区三区| 欧美亚洲综合久久| 国产伦精品一区二区三区免费迷| 亚洲欧洲精品一区二区精品久久久| 91黄色激情网站| 热久久免费视频| 国产精品丝袜黑色高跟| 色婷婷一区二区| 日韩中文字幕区一区有砖一区| 日韩三级免费观看| 成人av网站在线| 亚洲国产中文字幕| 欧美一区二区三区视频在线| 国产一区在线观看麻豆| 一区二区三区免费在线观看| 日韩午夜三级在线| 国产a精品视频| 丝袜国产日韩另类美女| 久久久久久9999| 在线看国产日韩| 裸体歌舞表演一区二区| 一区二区三区免费网站| 国产精品国模大尺度视频| 精品国产成人系列| 91精品免费在线观看| 日本电影欧美片| 国内精品免费**视频| 午夜精品在线视频一区| 国产午夜精品一区二区三区嫩草| 99视频精品全部免费在线| 蜜臀久久99精品久久久久久9 | 久久久久久久久久久久久女国产乱| 国产综合色在线视频区| 视频一区欧美日韩| 亚洲黄色尤物视频| 国产农村妇女毛片精品久久麻豆 | 欧美国产精品v| 日韩精品一区二区三区蜜臀| 欧美高清精品3d| 欧美精品777| 日韩欧美中文一区二区| 欧美日韩一区三区| 欧美日韩一级二级三级| 91色视频在线| 在线免费观看日本一区| 欧美这里有精品| 欧美精品丝袜中出| 欧美一区二区视频观看视频| 91精品国产福利在线观看| 欧美在线一区二区三区| 在线观看亚洲专区| 欧美日韩视频不卡| 欧美男同性恋视频网站| 91精品国产色综合久久不卡电影| 欧美日韩mp4| 欧美大肚乱孕交hd孕妇| 日韩欧美国产1| 久久精品一区蜜桃臀影院| 国产精品你懂的| 亚洲色图欧美激情| 亚洲国产日韩一区二区| 秋霞成人午夜伦在线观看| 国产主播一区二区三区| a级精品国产片在线观看| 色婷婷综合久久久中文一区二区 | 亚洲三级在线观看| 亚洲bt欧美bt精品777| 日韩成人一级大片| 麻豆一区二区三区| 丰满少妇在线播放bd日韩电影| 色噜噜狠狠色综合中国| 777亚洲妇女| 久久精品亚洲精品国产欧美kt∨ | 国产精品欧美一区喷水| 亚洲欧美色一区| 男女男精品视频| 成人的网站免费观看| 欧美日韩国产高清一区二区| 久久综合色播五月| 亚洲视频一二区| 狠狠色狠狠色合久久伊人| 成人精品视频一区二区三区 | 国产一区二区三区免费观看| 成人爽a毛片一区二区免费| 欧美日韩午夜在线视频| 久久精品视频一区二区| 午夜影院久久久| 国产麻豆精品在线| 欧美日韩亚洲综合在线| 国产精品传媒视频| 美脚の诱脚舐め脚责91| 91福利资源站| 中文字幕高清不卡| 精品在线一区二区| 91精品国产福利| 亚洲国产一区二区在线播放| 成人黄色综合网站| 久久看人人爽人人| 美国精品在线观看| 欧美男同性恋视频网站| 国产精品高潮呻吟久久| 国内精品伊人久久久久av一坑 | 欧美中文字幕一区二区三区| 国产亚洲欧美日韩日本| 美女看a上一区| 日韩视频在线永久播放| 视频一区免费在线观看| 欧美系列日韩一区| 亚洲精品乱码久久久久久黑人| 国产成人自拍在线| 日本一区二区在线不卡| 国产综合色视频| 久久综合99re88久久爱| 黑人巨大精品欧美一区| 日韩欧美一区二区视频| 日本中文在线一区| 日韩欧美国产1| 狠狠色伊人亚洲综合成人| 欧美精品一区二区三区久久久| 日韩 欧美一区二区三区| 日韩欧美综合在线| 国内精品国产成人国产三级粉色| 欧美成人精品二区三区99精品| 美女久久久精品| 亚洲精品在线免费观看视频| 国产一区二区三区久久久| 国产欧美一区二区在线| av资源网一区| 亚洲一区在线电影| 欧美日韩欧美一区二区| 日韩av二区在线播放| 精品电影一区二区三区 | 久久99精品久久久久久动态图| 日韩欧美中文字幕制服| 国产综合久久久久久鬼色| 国产欧美精品日韩区二区麻豆天美| 国产老肥熟一区二区三区| 国产精品美女久久久久高潮| 91成人国产精品| 免费看精品久久片| 精品国产91亚洲一区二区三区婷婷| 国产精品一二三| 亚洲人午夜精品天堂一二香蕉| 色网站国产精品| 青青草97国产精品免费观看| 久久精品人人爽人人爽| 99国产精品国产精品久久| 一区二区三区**美女毛片| 91精品国产综合久久久久久久| 久久99国产精品免费| 国产精品伦理在线| 欧美视频中文字幕| 极品瑜伽女神91| 国产精品国产精品国产专区不蜜| 色综合天天综合色综合av | 国产精品久久久久久亚洲伦| 色综合一个色综合亚洲| 奇米色一区二区| 国产精品麻豆视频| 欧美一区二区三区四区高清| kk眼镜猥琐国模调教系列一区二区| 一区二区三区视频在线观看| 精品国产成人系列| 欧美日本一道本在线视频| 国产成人精品aa毛片| 日产国产高清一区二区三区| 中文字幕日韩精品一区| 精品国产免费人成在线观看| 91久久线看在观草草青青| 国产精品一二三四五| 麻豆免费精品视频| 丝袜诱惑制服诱惑色一区在线观看| 国产精品免费丝袜| 国产色综合一区| 精品乱人伦小说| 99久久国产综合精品麻豆| 中文字幕一区二区三区视频| 26uuu色噜噜精品一区| 欧美日韩国产精品自在自线| 日本道精品一区二区三区|