首页 > 编程语言 > 详细

Lua table转C++数组

时间:2014-07-29 15:07:48      阅读:203      评论:0      收藏:0      [点我收藏+]

    为了方便,这里数组用vector表示。

    C++层代码如下:

static int LuaTable2Vector(lua_State *luaState)
{
	int count = luaL_getn(luaState, 1);
	std::vector<std::string> vecNameList;

	for (int i = 0; i < count; i++)
	{
		lua_rawgeti(luaState, 1, i+1);
		const char *strName = lua_tostring(luaState, -1);
		vecNameList.push_back(strName);

		lua_pop(luaState,1);
	}

	std::vector<std::string>::iterator it;
	for (it = vecNameList.begin(); it != vecNameList.end(); it++)
	{
		cout << (*it).data() << endl;
	}

	return 0;
}
简单解释一下上面的程序,lua_rawgeti(lua_state *L, int index, int key)涉及到两个索引,index表示table在栈中的位置,key表示元素在table中的位置。其等价操作为: 
ele = Stack[index]
value = ele[key]
Stack.push(value)

栈+1, 栈顶新增元素就是value。正因为增加了栈顶元素,所以后面可以利用lua_tostring(luaState, -1)取到值,并且最后需要调用lua_pop(luaState,1)将元素弹出栈。



    lua层调用代码很简单,就两行:

local nameTable = {"zhangsan", "lisi", "wangwu", "liubei", "guanyu"}
LuaTable2Vector(nameTable)





Lua table转C++数组,布布扣,bubuko.com

Lua table转C++数组

原文:http://blog.csdn.net/wang_lichun/article/details/38231627

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!