C++与lua之间的双向表交互

C++创建表结构代码: 

 1 std::map<std::wstring, std::wstring> mapInfo;
 2 lua_newtable(pLua);
 3 for(std::map<std::wstring, std::wstring>::iterator pos=mapInfo.begin(); pos!=mapInfo.end(); ++pos)
 4 {
 5     std::string keyUTF8 = TString::fromUtf16(pos->first).ToUtf8();
 6     std::string valueUTF8 = TString::fromUtf16(pos->second).ToUtf8();
 7     lua_pushstring(pLua, keyUTF8.c_str()); // key入栈
 8     lua_pushstring(pLua, valueUTF8.c_str()); // value入栈
 9     lua_settable(pLua, -3); //  相当于ref3[ref2] =ref1, ref3从栈顶算第三个参数,ref2从栈顶算第二个参数,ref1从栈顶参数,注意该操作会弹出从栈顶算第一个和第二个参数(也就是key和value)
10  }
11 return 1; // 返回一个参数,就是表

lua端遍历表代码:

 1 -- listArr为表结构
 2 for i=0, table.getn(listArr),1 do 
 3      local value =listArr[i]
 4 end
 5  
 6  
 7   
 8 -- 或者
 9  
10  
11 -- value为得到的变量值
12 for i, value in ipairs(listArr) do
13   -- do something
14 end
15 
16 
17 -- 关联表格,索引不为整数的遍历方法
18 for i, value in pairs(listArr) do
19    -- do something
20 end

lua表结构:

1 local listArr = {"key1" = "value1", "key2" = "value2", "key3" = "value3"}

C++端解析lua端传过来的表结构代码:

 1 int nIndex = lua_gettop(pLua); -- 取 table 索引值
 2 lua_pushnil(pLua); --  nil 入栈作为初始 key 
 3 
 4 -- lua_next是将栈顶的旧key或者初始化为nil的元素弹出,
 5 -- 并将nIndex位置的表下一键值对取出来放到栈顶
 6 while (0 != lua_next(pLua, nIndex)) 
 7 {
 8     -- 现在栈顶(-1)是 value,-2 位置是对应的 key 
 9     const char *str = lua_tostring(pLua, -1); -- 不同的value用不同的函数处理 
10     lua_pop(pLua, 1); -- 弹出 value,让 key 留在栈顶 
11 }    
原文地址:https://www.cnblogs.com/hui277/p/3336551.html