开发环境:vs2012

lua版本:LuaJIT-2.0.2

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

lua配置结构如下

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

我们读取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, );
//根配置入栈
lua_getglobal(luaState, "SceneConfig");
//key入栈
lua_pushinteger(luaState, );
//key弹出得到key对应的table入栈
lua_gettable(luaState, );
//子Key入栈,此时内table索引为-2
lua_pushstring(luaState, "name");
//得到name对应的值,key出栈,值入栈
lua_gettable(luaState, -); //获得栈顶值
cout << lua_tostring(luaState, -) << endl;
//栈顶值出栈
lua_pop(luaState, );
//压入key值
lua_pushstring(luaState,"sex");
//弹出key值,对应的值入栈
lua_gettable(luaState, -);
//得到栈顶值
cout << lua_tointeger(luaState, -) << 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的标准库做了一个封装

c++获取lua嵌套table某属性的值的更多相关文章

  1. [Jmeter]Xpath获取元素某个属性的值,以及获取最后一个元素某个属性的值

    XPath获取元素某个属性的值 XPath query:  clients/attribute::total XPath获取最后一个元素某个属性的值 XPath query:   /clients/c ...

  2. selenium 获取某元素的 某属性 的值

    selenium  获取某元素的 某属性的值 1 先通过元素定位,获得此元素的 WebElement; WebElement   yuansu = driver.findElement(By.clas ...

  3. [转载]C#用正则表达式 获取网页源代码标签的属性或值

    最近调试程序需要用到获取网页指定标签的属性和值,找到了一个比较好的正则匹配方法,特此备份. [原]C#用正则表达式 获取网页源代码标签的属性或值 整理两个 在C#中,用正则表达式 获取网页源代码标签的 ...

  4. Java使用PropertyDescriptor获取实体类中私有属性的值,并给私有属性赋值

    大家都知道Java类中的私有的(private)属性是获取不到的(即使使用继承依然获取不到),那如果非要获取私有属性的值怎么办呢?一般的做法是将该java类封装称为一个JavaBean,即封装该私有属 ...

  5. C#用正则表达式 获取网页源代码标签的属性或值

    1.有url获取到网页源代码: using System.Web; using System.IO; using System.Net; private void GetHtmlinfo(string ...

  6. v-for遍历出的元素上添加click事件,获取对应元素上的属性id值

    <span v-for="(n,nav) in floorList" data-id="{{nav.itemId}}" v-on:click=" ...

  7. select 获取option中其他的属性的值

    <select name="tag_keys[]" id="category_type" required> <option value=&q ...

  8. lua的table表处理 及注意事项

    lua,一款很轻量级很nice很强大的脚本语言,做为lua中使用最为频繁的table表,在使用之时还是有颇多的好处与坑的: 下面是大牛 云风的一片关于lua table的blog,可使得对lua ta ...

  9. C#用正则表达式 获取标签的属性或值

    整理两个 在C#中,用正则表达式 获取网页源代码标签的属性或值的方法 : 1.获取标签中的值: string str="<a href=\"www.csdn.net\&quo ...

随机推荐

  1. E. Holes(分块)

    题目链接: E. Holes time limit per test 1 second memory limit per test 64 megabytes input standard input ...

  2. [Python] 跳过前几行快速读取文件内容:islice

    from itertools import islice start = 1 # 跳过第一行idx=0,从idx=1开始读取文件 with codecs.open('data.json', encod ...

  3. memcached asp.net

    下载文件 memcached 1.解压缩文件到e:\memcached 2.命令行输入 e:\memcached\memcached.exe -d install' 3.命令行输入 e:\memcac ...

  4. Java中高级面试题整理

    一.基础知识: 1)集合类:List和Set比较,各自的子类比较(ArrayList,Vector,LinkedList:HashSet,TreeSet): 2)HashMap的底层实现,之后会问Co ...

  5. 【angular之起步】安装

    人生只有眼前的苟且. 所以为了远方,最近在策划一个大阴谋------做一个自己的网站,杂而全的. 各种胡思乱想了一周,先把页面写完了,没辙,就这个不用费太多脑子. 然后开始重头戏,就卡死了. angu ...

  6. 跳转后全屏,兼容大部分浏览器JavaScript

    <!DOCTYPE html> <html> <head> <title>测试</title> </head> <body ...

  7. Django(一):从socket到MVC

    一.socket的http套路 web应用本质上是一个socket服务端,用户的浏览器是一个socket客户端.socket处在应用层与传输层之间,是操作系统中I/O系统的延伸部分(接口),负责系统进 ...

  8. Tomcat 运行 idea 编译好的 .class JavaWeb 项目

    对于新手来说,对于项目部署,有时候就是以为拷贝在idea控制台里面跑的项目放到tomcat里面的webapps里面跑就可以了,这仅仅限于静态项目..... 他不像PHP , 修改源码直接可以跑, 而J ...

  9. flask第十九篇——模板【3】

    请关注微信公众号:自动化测试实战 今天我们继续模板的知识,现在我们增加字典的复杂度,这个时候在render_template第二个参数可以传**title,以后我们会用**context代替原来的ti ...

  10. 【requirejs】JS模块化工具requirejs教程

    初识requirejs 随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元 ...