程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c++遍歷lua table示例

c++遍歷lua table示例

編輯:關於C++

c++遍歷lua table示例。本站提示廣大學習愛好者:(c++遍歷lua table示例)文章只能為提供參考,不一定能成為您想要的結果。以下是c++遍歷lua table示例正文


c/c++從棧上獲得Lua壓棧過去的table數據


map<string,string> traverse_table(lua_State *L, int index)
{
 map<string,string> data;
    lua_pushnil(L);
    // 如今的棧:-1 => nil; index => table
 index = index - 1;
    while (lua_next(L, index))
    {
        // 如今的棧:-1 => value; -2 => key; index => table
        // 拷貝一份 key 到棧頂,然後對它做 lua_tostring 就不會轉變原始的 key 值了
        lua_pushvalue(L, -2);
        // 如今的棧:-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 的參數
        lua_pop(L, 2);
        // 如今的棧:-1 => key; index => table
    }
    // 如今的棧:index => table (最初 lua_next 前往 0 的時刻它曾經把上一次留下的 key 給彈出了)
    // 所以棧曾經恢復到進入這個函數時的狀況
 return data;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved