私は、テーブルのセットに比較的深くネストされた関数を持っています。 C/C++でその関数への "参照"を取得し、それを使用する必要があるときにスタックにその(とargs)をプッシュする方法はありますか?C/C++でのLua関数への参照
13
A
答えて
20
これはreference systemの対象です。関数呼び出しr = luaL_ref(L, LUA_REGISTRYINDEX)
は、スタックの先頭の値をレジストリに格納し、C側に格納できる整数を返し、関数呼び出しlua_rawgeti(L, LUA_REGISTRYINDEX, r)
で値を取得するために使用します。
PiL chapterと、全文はluaL_ref()
,lua_rawgeti()
、luaL_unref()
のドキュメントを参照してください。
2
Lua API(http://www.lua.org/manual/5.1/manual.html#3)を使用すると、必要なテーブルメンバーにアクセスできます。 lua_gettable()を使用してテーブルメンバーを抽出し、luaスタックに置いてください。メンバーがテーブルでもあれば、lua_gettable()を呼び出してこのテーブルにアクセスしてください。 「はコメントに反応して
addtionalの))(lua_gettableよりも良い選択かもしれません)(lua_rawgetをやっ再:
オーケーそれはもう少し面白いです。さて、テーブルは参照オブジェクトです(多かれ少なかれ)ので、最も内側のテーブル参照をどこかに保存するのはおそらく安全でしょう。
テーブル参照を直接操作するためのAPIがないため、参照をグローバルにプッシュする必要があります。または、単一のテーブルエントリで新しいテーブルを操作できない場合があります。後で参照をしたいときは、グローバルから取得してください。
// Final table reference is now at top of stack, after multiple dereferences
lua_setglobal(L, "mytableref");
関連する問題
- 1. 関数の戻り値への参照
- 2. ctypesと関数への参照渡し
- 3. 未定義テンプレート関数への参照
- 4. strcpyポインタ関数への参照
- 5. Clion関数への未定義参照
- 6. libusb関数への未定義参照
- 7. ローカルモジュール関数へのクラス参照
- 8. C++:関数への未定義参照
- 9. 関数ポインタへのconst参照
- 10. 関数への未定義参照CMake
- 11. C++関数への参照を渡す
- 12. 汎用関数への参照
- 13. ローカルオブジェクトへの参照を返す関数
- 14. Luaでのオブジェクトへの参照をすべて見つける
- 15. 変数への参照
- 16. PHP:関数への参照渡しの配列ですか?
- 17. これは関数への参照ですか、何ですか?
- 18. アセンブリ関数への参照引数の受け渡し
- 19. GCCプログラム関数への未定義参照(複数のフォルダ)
- 20. C++で定義された関数への未定義参照?
- 21. Javascript:setTimeoutの関数と参照
- 22. 関数内の参照ベクトル
- 23. 関数内のアンリゾルバー参照
- 24. コンストラクタ関数の参照
- 25. serverless.yml内の参照関数
- 26. コトリン関数の参照
- 27. 別のライブラリの関数への未定義の参照
- 28. (.text + 0x20):未定義の `main 'への参照と関数への未定義参照
- 29. クリックハンドラのコールバック関数へのデータ収集の参照を渡す
- 30. モジュール内の関数への未定義の参照
私はすでにそれを行う方法を知っています:)テーブル内のネストされた方法で参照される関数を取得したいので、後ですべてのテーブルをトラバースせずに関数を呼び出すことができます。 – jameszhao00
[回答に追加] –