返回 C++ 中作为 lua 表使用的 map

我想能够返回一个值的表,不是 userdata,在 lua 中使用 C++ 存储 map 中的数据,例如整数,字符串等。我该怎么做?

对不起,我没有完整的示例。

下面是 map:

    std::map<uint16_t, std::map<std::string, uint32_t>> myMap;

    void getMyMap(uint16_t i, std::string a, uint32_t& v) {
        v = myMap[i][a];
    }

我知道这不是模板,但假设它是。

编辑:

我自己解决了。我不会给出我正在处理的确切内容,但我会提供一个使用上面的代码的通用详细答案。

std::map<uint16_t, std::map<std::string, uint32_t>> myMap;

void getMyMap(uint16_t i, std::string a, uint32_t& v) {
    v = myMap[i][a];
}

std::map<std::string, size_t> getMapData(uint16_t i){
    return myMap[i];
}

int LuaReturnTableOfMap(lua_State *L)
{
    uint16_t data = 2;// 仅用于此示例
    // 获取存储的数据
    std::map<std::string, size_t> m = getMapData(data);
    // 获取映射的大小
    size_t x = m.size();

    // 创建我们将返回的具有 x 个元素的表
    lua_createtable(L, 0, x);

    // 使用我们想要返回的值填充表
    for(auto const &it : m){
        std::string str = it.first;
        const char* field = str.c_str();
        lua_pushnumber(L, it.second);
        lua_setField(L, -2, field);
    }
    // 告诉 lua 我们正在返回一个值(即表)
    return 1;
}
点赞
用户3923799
用户3923799

我无法推荐 Sol2(https://github.com/ThePhD/sol2) 对于C++/Lua的使用足够了。

在C++中,您可以分配嵌套映射,它足够聪明,可以为您创建嵌套的Lua表:

std::map<int, std::map<std::string, int>> nestedmap;
std::map<std::string, int> innermap;
innermap["frank"] = 15;
nestedmap[2] = innermap;

sol::state lua;
lua.set("mymap", nestedmap);

然后在您的Lua脚本中,您可以像访问表一样访问它:

print("Testing nested map: " .. mymap[2]["frank"]) -- prints 15
2016-08-26 18:14:19