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和换行符号详情