私は、テーブルのセットに比較的深くネストされた関数を持っています。 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. C++:関数への未定義参照
- 2. ctypesと関数への参照渡し
- 3. 未定義テンプレート関数への参照
- 4. ローカルオブジェクトへの参照を返す関数
- 5. 関数ポインタへのconst参照
- 6. Luaでのオブジェクトへの参照をすべて見つける
- 7. PHP:関数への参照渡しの配列ですか?
- 8. これは関数への参照ですか、何ですか?
- 9. C++で定義された関数への未定義参照?
- 10. Javascript:setTimeoutの関数と参照
- 11. コンストラクタ関数の参照
- 12. 別のライブラリの関数への未定義の参照
- 13. (.text + 0x20):未定義の `main 'への参照と関数への未定義参照
- 14. リンク中の関数への未定義の参照
- 15. C++の関数への未確認の参照
- 16. クリックハンドラのコールバック関数へのデータ収集の参照を渡す
- 17. 関数の別の関数への参照によってパラメータを渡す
- 18. C++ 11関数型の参照を参照で定義する
- 19. Luaの関数
- 20. C++テンプレートのメンバ関数への未定義参照
- 21. スプレッドシート関数へのセル参照の受け渡し
- 22. "関数への未定義の参照"エラー
- 23. 未定義関数の転置への参照
- 24. リンク時のエラー:関数への未定義参照
- 25. 定義済みの関数への未定義参照
- 26. 共有ライブラリ関数への未定義の参照
- 27. Xcodeのエラー:オーバーロードされた関数への参照を参照できませんでした
- 28. Javascriptでの匿名関数参照
- 29. C++構文/セマンティクス質問:関数とtypedefキーワードへの参照
- 30. Python:内部から関数への参照を取得する
私はすでにそれを行う方法を知っています:)テーブル内のネストされた方法で参照される関数を取得したいので、後ですべてのテーブルをトラバースせずに関数を呼び出すことができます。 – jameszhao00
[回答に追加] –