c_cpp 将多维表从C函数返回到lua

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 将多维表从C函数返回到lua相关的知识,希望对你有一定的参考价值。

/*
Return an array in this structure
http://stackoverflow.com/questions/20173954/how-to-return-a-multidimensional-table-from-c-function-to-lua

In Lua array values usually starts at 1.
{
    [1] = { ["field1"] = "1", ["field2"] = "2" , ["field3"] = "3" },
    [2] = { ["field1"] = "10" , ["field2"] = "20", ["field3"] = "30" }
}
*/

/* Pushes multidimentional table on top of Lua VM stack. */
int l_push_multidim_table(lua_State *l)
{
    /* Creates parent table of size 2 array elements: */
    lua_createtable(L, 2, 0);

    /* Puts key of the first child table on-top of Lua VM stack: */
    lua_pushnumber(L, 1);

    /*Creates first child table of size 3 non-array elements: */
    lua_createtable(L, 0, 3);

    /* Fills the first child table: */
    lua_pushnumber(L, 1);
    lua_setfield(L, -2, "field1");

    lua_pushnumber(L, 2);
    /* setfield() pops the value from Lua VM stack. */
    lua_setfield(L, -2, "field2");

    lua_pushnumber(L, 3);
    lua_setfield(L, -2, "field3");

    /* Remember, child table is on-top of the stack.
     * lua_settable() pops key, value pair from Lua VM stack. */
    lua_settable(L, -3);

    /* Pushes they key value for the second child table: */
    lua_pushnumber(L, 2);

    /*Creates second child table of size  3 non-array elements: */
    lua_createtable(L, 0, 3);

    /* Fills the second child table: */
    lua_pushnumber(L, 10);
    lua_setfield(L, -2, "field1");

    lua_pushnumber(L, 20);
    lua_setfield(L, -2, "field2");

    lua_pushnumber(L, 30);
    lua_setfield(L, -2, "field3");

    /* Remember, child table is still on-top of the stack.
     * lua_settable pops the key, value pair from Lua VM stack
     * And puts child table into the parent. */
    lua_settable(L, -3);

    /* Returns number of output tables:
     * (1 multidimentional)            */
    return 1;
}

以上是关于c_cpp 将多维表从C函数返回到lua的主要内容,如果未能解决你的问题,请参考以下文章

将链表从 C 传递到 C++

如何快速将返回的 Python-in-Lua numpy 数组转换为 Lua Torch 张量?

从 C 中的函数返回多维数组

lua入门之二:c/c++ 调用lua及多个函数返回值的获取

c_cpp C - 多维字符串数组

c_cpp 通过指针访问多维数组