我想在Lua中为脚本编写器设置一些函数,但是当调用这些函数时,我希望它们实际上使用我定义的参数调用单个函数。这可能看起来像:
的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 )
{
}
}
}
所以我对设置有点困惑。我试图用param注册回调。这就是我到目前为止所做的事情并没有通过函数注册保存参数;它似乎只保存了我添加的最后一个参数。
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程序员编写代码更容易,但那些只需要转换为相同的参数化函数。可以想象它通过传递一个参数来添加更改设置,但命名方式不同。
思想?
答案 0 :(得分:5)
您可能希望将这些上下文值附加为函数的upvalues。看看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" );
}