0

Luaでスクリプター用にいくつかの関数をセットアップしたいのですが、それらの関数が呼び出されたときに、定義したパラメーターを使用して実際に1つの関数を呼び出してもらいたいのです。これは次のようになります。

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プログラマーのためにコードを書くのを簡単にするために関数名を抽象化しようとしていますが、それらは単に同じパラメーター化された関数に変換する必要があります。単一のパラメータを渡すことで設定の変更を追加することを考えてください。ただし、名前は異なります。

考え?

4

1 に答える 1

5

これらのコンテキスト値を関数のアップバリューとして添付することをお勧めします。を見てください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" );
}
于 2012-05-12T19:20:54.437 に答える