从C ++调用未知(按名称)lua函数

大地

这是我想做的:

1)有一个用户定义的lua函数,我不知道它的名字。说是:

function f(x) return 2*x; end

2)然后,用户将从Lua调用一个函数(在第3步中设计),例如:

a=foo(f,3) --expecting a=6

3)foo的C ++函数是:

int lua_foo(lua_State *L)
{
    int nargs = lua_gettop(L);
    if(nargs<2) throw "ERROR: At least two arguments i) Function ii) number must be supplied";


    int type = lua_type(L, 1);
    if(type!=LUA_TFUNCTION) throw "ERROR: First argument must be a function";

    double arg2=lua_tonumber(L,2);
    lua_pushnumber(L,arg2);

    lua_pcall(L, 1, 1, 0) ; //trying to call the function f

    double result=lua_tonumber(L,-1); //expecting the result to be 6
    lua_pushnumber(L,result);

    lua_pop(L,nargs);

    return 1;
}

在C ++代码中,我知道第一个参数是一个函数,第二个参数是一个数字。我试图用第二个参数(数字)作为参数来调用第一个参数(函数)。

大地

如果功能设计如下:

/* avoid `lua_` (or `luaL_`) prefix for your own functions */
static int l_foo(lua_State *L)
{
    /* `lauxlib.h` contains a lot of useful helper functions, e.g. for
     * argument type checking: */
    luaL_checktype(L, 1, LUA_TFUNCTION);
    luaL_checknumber(L, 2);
    /* discard any extra arguments to `foo`; ignoring extra arguments
     * is customary for Lua functions */
    lua_settop(L, 2);
    /* the `lua_settop()` above ensures that the two topmost elements
     * of the stack are the function `f` and its argument, so
     * everything is set for the `lua_call()` */
    lua_call(L, 1, 1);
    /* return the topmost value on the Lua stack (the result); all
     * other stack values are removed by Lua automatically (but in
     * this case the result is the only value on the stack as the
     * `lua_call()` popped the function and the argument, and pushed
     * one result) */
    return 1;
}

它按预期工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从C ++调用Lua函数

来自分类Dev

从C ++调用Lua函数

来自分类Dev

仅按名称调用C函数,不带参数

来自分类Dev

仅按名称调用C函数,不带参数

来自分类Dev

在 java 或 c++ 中使用“按名称调用”调用此函数的结果和示例是什么?

来自分类Dev

从C调用lua脚本返回的函数

来自分类Dev

lua同步调用C异步函数

来自分类Dev

无法从Lua-lanes调用C函数

来自分类Dev

lua同步调用C异步函数

来自分类Dev

使用LuaBridge从C ++调用Lua函数

来自分类Dev

从Lua的活动程序中调用C ++函数

来自分类Dev

从 LUA 脚本调用 C++ 类函数

来自分类Dev

Lua C 函数调用返回 nil

来自分类Dev

按平台名称过滤的C ++函数

来自分类Dev

函数名称生成和C ++调用

来自分类Dev

绑定C ++函数并以类为参数调用Lua函数

来自分类Dev

从C ++调用Lua表函数并带有自输入函数

来自分类Dev

Lua-C ++集成:从C ++调用表中的函数

来自分类Dev

在C / C ++中使用其地址调用lua函数吗?

来自分类Dev

有没有办法将 Lua 成员变量绑定为具有该变量名称的 C/C++ 函数调用

来自分类Dev

Lua发送被调用函数的名称

来自分类Dev

Lua发送被调用函数的名称

来自分类Dev

在C语言中调用的函数中,遍历Lua中的表

来自分类Dev

调用Lua函数时的LuaBind C ++错误处理程序

来自分类Dev

如何在C#中用AluminumLua调用Lua函数?

来自分类Dev

在C语言调用的函数中遍历Lua中的表

来自分类Dev

有条件地从C ++调用Lua函数

来自分类Dev

C ++函数按值调用不起作用

来自分类Dev

C未知类型名称“ DATA”