在C语言中将Lua函数作为参数

我将传递一个函数给另一个函数,并且应该使用传递的函数进行操作。例如:

    handler(fun1("foo",2))
    handler(fun2(1e-10))

handler类似于多次调用传递的函数。 我将把handler,fun1和fun2绑定到C函数。fun1和fun2将返回指向一些cpp-class的用户数据的指针,以便我可以进一步恢复它是哪个函数。

现在的问题是,在传递给handler之前将调用fun1和fun2。但我不需要这个,我需要的是函数类型及其参数。但是,我应该能够单独调用fun1和fun2而不需要handler:

    fun1("bar",3)
    fun2(1e-5)

是否可能获得调用函数的上下文?

在输入问题时,我意识到可以这样做:

    handler(fun1, "foo"2);
    handler(fun2, 1e-10);
点赞
用户1208078
用户1208078

可能最好的方法是将函数和要调用的参数放在一个表中传递。

function handler(func, args)
    -- 这里进行一些清理工作?
    ...
    -- 调用函数
    local ret = func(table.unpack(args))
    -- 对返回值做些什么?
end

handler(fun1, {"foo", 2})
handler(fun2, {1e-10})
2012-05-31 14:20:17
用户501459
用户501459

你可以将调用绑定到另一个函数的参数中,然后将其传递给处理函数:

function handler(func)
        -- 调用 func,或将其存储以供以后使用,或执行其他操作
end

handler(function() fun1("foo", 2) end)
handler(function() fun2(1e-10) end)

现在 handler 不必担心存储和解包参数表,它只需调用一个函数。

2012-06-07 22:36:07