LUA-c++交互篇-c++向lua传递table
1.代码
1.1 如果你只想传递一个table
typedef unordered_map<string, double> sdmap;
static void addDic(lua_State* L, sdmap& mp) {
sdmap::iterator it = mp.begin();
lua_newtable(L);
while (it != mp.end()) {
string data = it->first;
lua_pushstring(L,data.c_str());
lua_pushnumber(L, it->second);
lua_settable(L, -3);
it++;
}
}
1.2 如果你想要传递很多table
static int addTableArray(lua_State *L_,int size,sdmap* map)
{
lua_newtable(L_);
int i = 1;
for (int i = 1; i < size;i++)
{
lua_pushnumber(L_, i);
lua_newtable(L_);
sdmap::iterator it = map[i-1].begin();
while (it != map[i - 1].end()) {
lua_pushstring(L_, it->first.c_str());
lua_pushnumber(L_, it->second);
lua_settable(L_, -3);
it++;
}
lua_settable(L_, -3);
}
delete[] map;
return 1;
}
下图是在c++中调用这个接口的例子:
注意,在extern “C”的代码中,返回的是1,也就是栈底
如果你对栈的位置由问题,建议参考游戏服务器开发大纲里面关于lua的东西
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3faf554915c310c1d95fca31b447ad7a.png)
2. 测试
2.1 c++代码段
double x, y, z;
sdmap mp;
mp.insert({ "x",x });
mp.insert({ "y",y });
mp.insert({ "z",z });
addDic(L, mp);