c++ - 带有元数据的 Lua 回调

标签 c++ lua luabind

我想在 Lua 中为脚本编写者设置几个函数,但是当调用这些函数时,我希望他们实际调用一个带有我定义的参数的函数。这可能看起来像:

路亚:

    foo1()
    foo2()

C++:

int myFunction( lua_State * context )
{
    int numArgs = lua_gettop( context );
    int topOfStack = -3;
    bool lightUserDataFlag = lua_islightuserdata( context, topOfStack );

    if( lightUserDataFlag )
    {
    }
}

所以我对设置有点困惑。我正在尝试使用参数注册回调。这是我到目前为止所拥有的,有些东西没有通过函数注册保存参数;它似乎只保存了我添加的最后一个参数。

void setupCallback()
{
    lua_register( context, "foo1", Callback);
    lua_pushlightuserdata( context, &value[0] );
    lua_register( context, "foo2", Callback);
    lua_pushlightuserdata( context, &value[1] );
}

当 lua 调用我的回调时,我总是看到值[1],而不是值[0]。我玩过注册回调然后添加表格的想法,但我不确定这是否能让我更进一步。

至于原因:我正在尝试抽象函数名称以使我们的 lua 程序员更容易编写代码,但这些只需要转换为相同的参数化函数。想一想它通过传递单个参数来添加更改设置,但以不同的方式命名。

想法?

最佳答案

您可能希望将这些上下文值附加为函数的上值。看看 lua_pushcclosure()

结合 Mickey Kawick 的评论:

int Callback (lua_State *context)
{
    int val= lua_tointeger( context, lua_upvalueindex(1) );
    cout << val << endl;
    ...
} 

void setup()
{
    lua_pushnumber( context, 3 );
    lua_pushcclosure( context, Callback, 1 );
    lua_setglobal( context, "foo1" );

    lua_pushnumber( context, 42 );
    lua_pushcclosure( context, Callback, 1 );
    lua_setglobal( context, "foo2" );
}

关于c++ - 带有元数据的 Lua 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10566635/

相关文章:

c++ - 使用 luabind 将类指针返回到 lua

c++ - 将函数输出直接传递给接受引用参数的函数?

c++ - 主发电机 : Good place for singleton?

dictionary - 推字典?如何在 Lua 中实现这一点?

layout - 很棒的 WM : Rearrange windows without changing layout

lua -> 如何将这些参数修改为 const,或者我应该做什么?

c++ - C++中类或函数的可访问性是如何控制的

c++ - 如何将 gprof 与 autotools 一起使用?

Luabind 有条件调用 Lua 函数

c++ - 使用继承的 luabind 和 std::shared_ptr