Lua table转C++数组

    为了方便,这里数组用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)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值