• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c++获取lua嵌套table某属性的值

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

开发环境:vs2012

lua版本:LuaJIT-2.0.2

lua文件作为配置文件,c++读取这个配置。

lua配置结构如下

SceneConfig = 
{
    [1] = { name ="lsySB", sex = 1},
    [2] = 2
}

我们读取SceneConfig[1].name的值,这是一个嵌套的table

int main()
{
    lua_State *luaState = lua_open();              
        // 创建 Lua 状态. 其实就是一个数据结构.
    luaL_openlibs(luaState);                            
        // 加载所有标准库, 例如: print 等.
    luaL_dofile(luaState, "../Debug/test.lua");
    //index为0,表示把栈全清空
    lua_settop(luaState, 0);
    //根配置入栈
    lua_getglobal(luaState, "SceneConfig");
    //key入栈
    lua_pushinteger(luaState, 1);
    //key弹出得到key对应的table入栈
    lua_gettable(luaState, 1);
        //子Key入栈,此时内table索引为-2
        lua_pushstring(luaState, "name");
        //得到name对应的值,key出栈,值入栈
        lua_gettable(luaState, -2);
    
    //获得栈顶值    
    cout << lua_tostring(luaState, -1) << endl;
    //栈顶值出栈
    lua_pop(luaState, 1);
    //压入key值
    lua_pushstring(luaState,"sex");
    //弹出key值,对应的值入栈
    lua_gettable(luaState, -2);
    //得到栈顶值
    cout << lua_tointeger(luaState, -1) << endl;
    getchar();
}   

首先得到全局变量,然后压入key,1,这里1是int,而不能用“1”,根据这个key取出来的是里面的table即Sceneconfig[1]的值,

重复上述过程,name压入栈然后得出name的值。

上述过程是最原始的一种方法,下面有个简单的方法。

通过

int lua_getfield (lua_State *L, int index, const char *k);

把 t[k] 的值压栈, 这里的 t 是索引指向的值。 在 Lua 中,这个函数可能触发对应 "index" 事件对应的元方法。

这里很容易的可以通过key得到table的值,相当于lua的标准库做了一个封装


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
安装nginx、drizzle和lua发布时间:2022-07-22
下一篇:
distri.lua的web运维工具发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap