欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++遍歷Lua table的方法實(shí)例

 更新時(shí)間:2015年04月23日 11:07:41   投稿:junjie  
這篇文章主要介紹了C++遍歷Lua table的方法實(shí)例,本文給出了Lua table數(shù)據(jù)格式、C++實(shí)現(xiàn)的遍歷代碼以及輸出效果,需要的朋友可以參考下

Lua table數(shù)據(jù)如下:

復(fù)制代碼 代碼如下:

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

要讀出上面table 中所有數(shù)據(jù),C++代碼如下:

復(fù)制代碼 代碼如下:

//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;
}

運(yùn)行結(jié)果:

復(fù)制代碼 代碼如下:

$ ./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:小麗

相關(guān)文章

  • 淺談chuck-lua中的多線程

    淺談chuck-lua中的多線程

    Lua對(duì)多線程支持初步體驗(yàn)是本文要介紹的內(nèi)容,主要是來了解LUA中多線程的使用,,經(jīng)過反復(fù)的實(shí)驗(yàn)得到的結(jié)果是,lua不支持多線程,如何讓它支持?來看本文內(nèi)容。
    2015-07-07
  • Lua教程(五):C/C++操作Lua數(shù)組和字符串示例

    Lua教程(五):C/C++操作Lua數(shù)組和字符串示例

    這篇文章主要介紹了Lua教程(五):C/C++操作Lua數(shù)組和字符串示例,本文同時(shí)還講解了如何在C/C++函數(shù)里面存儲(chǔ)Lua狀態(tài),需要的朋友可以參考下
    2014-09-09
  • Lua教程(十五):輸入輸出庫(kù)(I/O庫(kù))

    Lua教程(十五):輸入輸出庫(kù)(I/O庫(kù))

    這篇文章主要介紹了Lua教程(十五):輸入輸出庫(kù),本文講解了簡(jiǎn)單模型、完整I/O模型、性能小技巧、其它文件操作等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua的堆棧淺析

    Lua的堆棧淺析

    這篇文章主要介紹了Lua的堆棧淺析,本文參考游戲人工智能編程案例精粹中的Lua堆棧索引圖,畫出了自己的一張理解圖,需要的朋友可以參考下
    2014-09-09
  • Lua性能優(yōu)化技巧(五):削減、重用和回收

    Lua性能優(yōu)化技巧(五):削減、重用和回收

    這篇文章主要介紹了Lua性能優(yōu)化技巧(五):削減、重用和回收,本文用多個(gè)實(shí)例講解了這三個(gè)優(yōu)化技巧,需要的朋友可以參考下
    2015-04-04
  • Lua中的遞歸函數(shù)寫法實(shí)例

    Lua中的遞歸函數(shù)寫法實(shí)例

    這篇文章主要介紹了Lua中的遞歸函數(shù)寫法實(shí)例,本文直接給出代碼實(shí)例,并作了簡(jiǎn)潔注釋,需要的朋友可以參考下
    2015-04-04
  • Lua中調(diào)用C++函數(shù)示例

    Lua中調(diào)用C++函數(shù)示例

    這篇文章主要介紹了Lua中調(diào)用C++函數(shù)示例,本文給出的C++函數(shù)average()演示了如何接受多個(gè)參數(shù)且返回超過一個(gè)值,需要的朋友可以參考下
    2015-07-07
  • Lua字符串庫(kù)中的幾個(gè)重點(diǎn)函數(shù)介紹

    Lua字符串庫(kù)中的幾個(gè)重點(diǎn)函數(shù)介紹

    這篇文章主要介紹了Lua字符串庫(kù)中的幾個(gè)重點(diǎn)函數(shù)介紹,本文講解了幾個(gè)最常用的強(qiáng)大的字符串函數(shù)find、match、gsub、gmatch,需要的朋友可以參考下
    2014-09-09
  • Lua中string.len()使用指南

    Lua中string.len()使用指南

    Lua 字符串庫(kù)中的所有函數(shù)都導(dǎo)出在模塊 string 中,今天我們先來看看string.len()的使用,有需要的小伙伴可以參考下
    2016-08-08
  • Lua性能優(yōu)化技巧(二):基本事實(shí)

    Lua性能優(yōu)化技巧(二):基本事實(shí)

    這篇文章主要介紹了Lua性能優(yōu)化技巧(二):基本事實(shí),本文講解了一些編譯器和寄存器的一些知識(shí),需要的朋友可以參考下
    2015-04-04

最新評(píng)論