LUAで軽いユーザーDataにアクセスします
-
26-10-2019 - |
質問
私は彼らの使用を誤解しているか、ドキュメントを誤解しているかもしれませんが、Luaに渡された構造体またはクラスのメンバーにLuaに渡されたメンバーにアクセスするにはどうすればよいですか?たとえば、次の構造を使用してベクトルの場合
typedef struct Foo {
int x;
int y;
} Foo;
「テスト」として宣言され、x = 413やy = 612のようなものとして定義され、電話でプッシュされました
lua_pushlightuserdata( L, (void *) &test ) ;
XとYを操作または印刷する関数のLUAコードはどのようなものですか?
解決
LuaのLight userDataは単なるポインターです。 Luaは、ポインターによって参照されるオブジェクトの内容を読む方法を理解していません。このデータの目的は、あるC API呼び出しが別のAPI呼び出しへの参照を渡すことを許可することです。
LUAのデータを使用したい場合は、スタックに押し込む必要があります。場合は、テーブルになります。 CとLUAの間で同期するこのデータが必要な場合は、割り当てを処理して他の環境に値をコピーするために、両側に関数を記述する必要があります。もう1つのオプションは、luaにデータを持っている場合のみ、cの場合はlua APIを介して取得するか、cでそれを持ち、luaでc api(作成する)を介してそれを取得することです。
詳細については、 ルアでのプログラミング そしてその lua-users wiki それぞれに簡単な説明があります。
他のヒント
何もない。 LUAからの任意の種類のユーザーDataを使用してアクセスしたり、何もアクセスしたりすることはできません。すべての操作にC ++関数を提供する必要があります。もちろん、これはメタ機能を正しく使用することで簡単にすることができます。
ああ、あなたはそれを必要としません typedef struct
C ++のがらくた。あなたはただ言うことができます
struct Foo {
int x;
int y;
};