9

在 C++ 中,我有一个map<string, string>, 包含未知数量的条目。如何将它传递给 Lua 函数,以便 Lua 函数可以将数据用作表?

4

2 回答 2

19

如果你想要一个真正的 lua 表:

lua_newtable(L);
int top = lua_gettop(L);

for (std::map::iterator it = mymap.begin(); it != mymap.end(); ++it) {
    const char* key = it->first.c_str();
    const char* value = it->second.c_str();
    lua_pushlstring(L, key, it->first.size());
    lua_pushlstring(L, value, it->second.size());
    lua_settable(L, top);
}

用适合您的地图的正确类型替换为..

于 2009-01-19T22:32:58.997 回答
5

几个选项...

  1. 将地图复制到新的 Lua 表中,并传递 Lua 表。

  2. 创建一个代理表,通过元表和元方法指导读取__index__newindex写入

当然,(1)的缺点是所有的复制。

(2) 的缺点是pairs()不能在代理表上工作

在 wiki这个邮件列表线程pairs中讨论了对 Lua 进行通用化的修复。预计Lua 5.2会泛化pairs

于 2009-01-17T18:43:30.780 回答