0

次のC関数について考えてみましょう。

void returnMultipleValuesByPointer(int* ret0, int* ret1, int* ret2)
{
    *ret0 = 0;
    *ret1 = 1;
    *ret2 = 2;
}

LuaBridgeを使用してLuaで公開するにはどうすればよいですか?すべてのドキュメントと例は、ポイントされたオブジェクトがクラスである複雑なケースを示していますが、そのような単純なケースに対処する方法を見つけることができません...

些細なアプローチ(つまりluabridge::getGlobalNamespace(L).addFunction("test", &returnMultipleValuesByPointer))、コンパイルされますが、値がアドレスによって渡されることを理解していません。

4

2 に答える 2

2

これを直接行うことはできません。パラメータを戻り値に変換するラッパー メソッドを作成する必要があります。これには、そのようなメソッドを記述する必要があります。たとえば、これらが純粋な戻り値である場合 (つまり、パラメーターを取らない場合):

int lua_ReturnMultipleValuesByPointer(lua_State *L)
{
  int ret0;
  int ret1;
  int ret2;
  returnMultipleValuesByPointer(&ret0, &ret1, &ret2);
  lua_pushinteger(L, ret0);
  lua_pushinteger(L, ret1);
  lua_pushinteger(L, ret2);
  return 3;
}

これは標準の Lua 関数であるため、「addCFunction」で登録する必要があります。

于 2013-01-10T19:52:03.433 に答える
0

やりたいことが次のような場合:

a=0
b=0
c=0
test(a,b,c)
-- NOW a is 0, b is 1, c is 2

私はそれが可能だとは思わない。次のような lua 呼び出しに戻す必要があります。

a,b,c=test()

これで、 test は次のように宣言できます。

luabridge::getGlobalNamespace(L).addCFunction("test", &returnMultipleValues)

int returnMultipleValues (lua_State* L) {
    push(L,0);
    push(L,1);
    push(L,2);
    return 3;
}
于 2013-01-10T09:46:37.790 に答える