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)





Lua table转C++数组,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。