我想在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调用我的回调时,我总是看到value [1],从没有看到value [0]。我玩过注册回调然后添加表的想法,但是我不确定这是否会让我更进一步。

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

有什么想法吗?

最佳答案

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

结合米奇·凯威克的评论:

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/

10-14 16:31