• 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 }    
  • 相关阅读:
    牛客网提高五练习
    [BZOJ2820]YY的GCD
    [BZOJ2301][HAOI2011]Problem B
    [板子]快速读入
    复选框改成开关样式,滑动切换(纯css实现)
    rem的使用方法
    html添加删除输入框
    jq 实现全选反选,获取选中的值
    cdn引入vant框架使用在html页面使用
    为什么vuejs里面定义的template模板里定义的多个元素只显示一个
  • 原文地址:https://www.cnblogs.com/hui277/p/3336551.html
Copyright © 2020-2023  润新知