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