3

それらの使用法を誤解したり、ドキュメントを読み間違えたりする可能性がありますが、Luaにライトユーザーデータとして渡された構造体またはクラスのメンバーにアクセスするにはどうすればよいですか?たとえば、次の構造体を使用するベクトルの場合

typedef struct Foo {
  int x;
  int y;
} Foo;

'test'として宣言され、x=413およびy=612のようなものとして定義され、呼び出しでプッシュされました

lua_pushlightuserdata( L, (void *) &test ) ;

xとyを操作または出力する関数のLuaコードはどのようになりますか?

4

2 に答える 2

11

Luaのライトユーザーデータは単なるポインターです。Luaは、ポインターによって参照されるオブジェクトの内容を読み取る方法を理解していません。このデータの目的は、あるCAPI呼び出しが別のAPI呼び出しへの参照を渡すことができるようにすることです。

Luaでデータを操作する場合は、データをスタックにプッシュする必要があります。あなたの場合は、テーブルにします。このデータをCとLuaの間で同期する必要がある場合は、割り当てを処理して値を他の環境にコピーするために、両側で関数を作成する必要があります。もう1つのオプションは、Luaにある場合はLuaのみにデータを保持し、Lua APIを介してデータを取得するか、Luaにある場合はCにデータを保持し、C API(作成する)を介してデータを取得することです。

詳細については、LuaでのプログラミングLua-usersWikiにそれぞれ簡単な説明があります。

于 2011-06-10T16:17:39.697 に答える
1

何もない。Luaのあらゆる種類のユーザーデータにアクセスしたり、何かを実行したりすることはできません。すべての操作にC++関数を提供する必要があります。もちろん、これはメタ関数を正しく使用することで簡単にできます。

typedef structああ、 C++ではそのがらくたは必要ありません。あなたはただ言うことができます

struct Foo {
    int x;
    int y;
};
于 2011-06-10T15:03:40.467 に答える