c++遍历lua table示例
c++遍历lua table示例
发布时间:2016-12-28 来源:查字典编辑
摘要:c/c++从栈上获取Lua压栈过来的table数据复制代码代码如下:maptraverse_table(lua_State*L,intind...

c/c++从栈上获取Lua压栈过来的table数据

复制代码 代码如下:

map<string,string> traverse_table(lua_State *L, int index)

{

map<string,string> data;

lua_pushnil(L);

// 现在的栈:-1 => nil; index => table

index = index - 1;

while (lua_next(L, index))

{

// 现在的栈:-1 => value; -2 => key; index => table

// 拷贝一份 key 到栈顶,然后对它做 lua_tostring 就不会改变原始的 key 值了

lua_pushvalue(L, -2);

// 现在的栈:-1 => key; -2 => value; -3 => key; index => table

const char* key = lua_tostring(L, -1);

const char* value = lua_tostring(L, -2);

data[key]=value;

// 弹出 value 和拷贝的 key,留下原始的 key 作为下一次 lua_next 的参数

lua_pop(L, 2);

// 现在的栈:-1 => key; index => table

}

// 现在的栈:index => table (最后 lua_next 返回 0 的时候它已经把上一次留下的 key 给弹出了)

// 所以栈已经恢复到进入这个函数时的状态

return data;

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C语言学习
热门C语言学习
编程开发子分类