c++遍歷lua table示例
更新時(shí)間:2014年04月30日 10:08:39 作者:
這篇文章主要介紹了c++遍歷lua table示例,需要的朋友可以參考下
c/c++從棧上獲取Lua壓棧過來的table數(shù)據(jù)
復(fù)制代碼 代碼如下:
map<string,string> traverse_table(lua_State *L, int index)
{
map<string,string> data;
lua_pushnil(L);
// 現(xiàn)在的棧:-1 => nil; index => table
index = index - 1;
while (lua_next(L, index))
{
// 現(xiàn)在的棧:-1 => value; -2 => key; index => table
// 拷貝一份 key 到棧頂,然后對它做 lua_tostring 就不會改變原始的 key 值了
lua_pushvalue(L, -2);
// 現(xiàn)在的棧:-1 => key; -2 => value; -3 => key; index => table
const char* key = lua_tostring(L, -1);
const char* value = lua_tostring(L, -2);
data[key]=value;
// 彈出 value 和拷貝的 key,留下原始的 key 作為下一次 lua_next 的參數(shù)
lua_pop(L, 2);
// 現(xiàn)在的棧:-1 => key; index => table
}
// 現(xiàn)在的棧:index => table (最后 lua_next 返回 0 的時(shí)候它已經(jīng)把上一次留下的 key 給彈出了)
// 所以棧已經(jīng)恢復(fù)到進(jìn)入這個(gè)函數(shù)時(shí)的狀態(tài)
return data;
}
相關(guān)文章
VC++ 中ListCtrl經(jīng)驗(yàn)總結(jié)
這篇文章主要介紹了VC++ 中ListCtrl經(jīng)驗(yàn)總結(jié)的相關(guān)資料,需要的朋友可以參考下2015-06-06
C語言實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)任意進(jìn)制的代碼詳解
這篇文章主要介紹了C語言實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)任意進(jìn)制,運(yùn)用一個(gè)數(shù)組,通過數(shù)字每次取任意進(jìn)制模,存在數(shù)組中, 再通過倒取數(shù)組中的數(shù)值,來實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換,如果遇到十六進(jìn)制,利用ASCII碼值 數(shù)字字符和大寫字母 相差55的特性來解決,文中有詳細(xì)代碼示例,需要的朋友可以參考下2024-05-05

