• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    C++遍历Lua table的方法实例

    Lua table数据如下:

    复制代码 代码如下:

    --$ cat test.lua lua文件
    user = {
            ["name"] = "zhangsan",
            ["age"] = "22",
            ["friend"] = {
                    [1] = {
                        ["name"] = "小丽",
                        ["sex"] = "女",
                        ["age"] = "20",
                    },
                    [2] = {
                        ["name"] = "小罗",
                        ["sex"] = "男",
                        ["age"] = "20",
                    },
                },
            }

    要读出上面table 中所有数据,C++代码如下:

    复制代码 代码如下:

    //C++代码:
    #include lua.hpp>
    #include iostream>
    #include string>
    using namespace std;
     
    bool popTable(lua_State* L, int idx)
    {
        try{
            lua_pushnil(L);
            while(lua_next(L, idx) != 0){
                int keyType = lua_type(L, -2);
                if(keyType == LUA_TNUMBER){
                    double value = lua_tonumber(L, -2);
                    cout "Key:" value endl;
                }else if(keyType == LUA_TSTRING){
                    const char*  value = lua_tostring(L, -2);
                    cout "Key:" value endl;
                }else{
                    cout "Invalid key type: " keyType endl;
                    return false;
                }
                int valueType = lua_type(L, -1);
                switch(valueType){
                    case LUA_TNIL:
                    {
                        cout "Value: nil" endl;
                        break;
                    }
                    case LUA_TBOOLEAN:
                    {
                        int value = lua_toboolean(L, -1);
                        cout value endl;
                        break;
                    }
                    case LUA_TNUMBER:
                    {    cout "Value:" lua_tonumber(L, -1) endl;
                        break;
                    }
                    case LUA_TSTRING:
                    {
                        cout "Value:" lua_tostring(L, -1) endl;
                        break;
                    }
                    case LUA_TTABLE:
                    {
     
                        cout "====sub table===" endl;
                        int index = lua_gettop(L);
                        if (!popTable(L, index)) {
                            cout "popTable error in  popTable,error occured" endl;
                            return false;
                        }
                        break;
                    }
                    default:
                    {
                        cout "Invalid value type: " valueType endl;
                        return false;
                    }
                }
                lua_pop(L, 1);
            }
        }catch(const char* s){
           string errMsg = s;
           lua_pop(L,1);
           cout errMsg endl;
           return false;
        }catch(std::exception e){
            const char* errMsg = e.what();
            lua_pop(L,1);
            cout errMsg endl;
            return false;
        }catch(...){
            const char* errMsg = lua_tostring(L,-1);
            lua_pop(L,1);
            cout errMsg endl;
            return false;
        }
        return true;
    }
     
     
    int main(int argc, char* argv)
    {
        lua_State* L = luaL_newstate();
        luaL_openlibs(L);
        int r = luaL_dofile(L,"./test.lua");
        lua_getglobal(L, "user");
        int type = lua_type(L,1);
        if(type == LUA_TTABLE){
            int index = lua_gettop(L);
            if(popTable(L,index)){
                return 0;
            }else{
                cout "Error" endl;
                return -1;
            }
        }
        return 0;
    }

    运行结果:

    复制代码 代码如下:

    $ ./cpptable.linux_64_gcc4
    Key:age
    Value:22
    Key:name
    Value:zhangsan
    Key:friend
    ====sub table===
    Key:2
    ====sub table===
    Key:sex
    Value:男
    Key:age
    Value:20
    Key:name
    Value:小罗
    Key:1
    ====sub table===
    Key:sex
    Value:女
    Key:age
    Value:20
    Key:name
    Value:小丽

    您可能感兴趣的文章:
    • c++中explicit与mutable关键字的深入探究
    • C++中const、volatile、mutable使用方法小结
    • C++中mutable与volatile的深入理解
    • 浅谈C++中的mutable和volatile关键字
    • C++中MFC Tab Control控件的使用详解
    • Lua教程(三):C语言、C++中调用Lua的Table示例
    • c++遍历lua table示例
    • 深入解析C++中的mutable关键字
    • c++关键字mutable深入解析
    • C++解析特殊符号tab和换行符号详情
    上一篇:Lua中关于求模与求余的区别介绍
    下一篇:Lua的table库函数insert、remove、concat、sort详细介绍
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    C++遍历Lua table的方法实例 C++,遍历,Lua,table,的,方法,