c++下 遍历 lua table
来源:互联网 发布:js获取事件源 编辑:程序博客网 时间:2024/06/18 13:43
前不久在网上看到一段代码,功能是遍历lua的table。当然也可以衍生成 lua table向c++中的map的转化。直接上代码,仅供同学们参考。(注:这代段代码是网上的 非本人所写 仅供学习)
//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;}--$ cat test.lua lua文件 user = { ["name"] = "zhangsan", ["age"] = "22", ["friend"] = { [1] = { ["name"] = "小丽", ["sex"] = "女", ["age"] = "20", }, [2] = { ["name"] = "小罗", ["sex"] = "男", ["age"] = "20", }, }, }
0 0
- C遍历lua的table
- c++下 遍历 lua table
- Lua 学习笔记:C API 遍历 Table
- Lua 学习笔记:C API 遍历 Table
- C/C++ 中遍历 Lua table 完整版
- C/C++ 中遍历 Lua table 完整版
- C/C++遍历Lua中的table
- c遍历lua中table的方法
- 在C/C++中 用C API遍历lua table
- lua table 遍历
- Lua 中Table遍历
- lua 遍历 table
- Lua--table的遍历
- lua table 遍历
- lua遍历table
- lua遍历table方式
- lua中的table遍历
- Lua中table的遍历
- 窗口、视口、屏幕显示详解--计算机绘图基本功
- java的延时
- Junit使用教程(二)
- getaddrinfo(),freeaddrinfo(), gai_strerror()函数详解
- Linux dd 命令详解
- c++下 遍历 lua table
- CentOS 6.4中升级编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 以及Kdump配置
- 分布式MySQL数据库TDSQL架构分析
- Spring mvc注解方式使用事务回滚
- Android进步之路四:SimpleAdapter类的具体用法
- 使用流畅的pdf分割软件
- C++细节学习之const对象只能调用const函数
- 从窗口到视口的映射
- Mac快捷键