問題タブ [luabind]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lua - メインテーブルの下にあるテーブルパラメータを反復するにはどうすればよいですか?
luaでは、内部的に多くのパラメータを含むテーブル変数を返す関数を呼び出しています..しかし、その値を取得すると、テーブルに存在するパラメータにアクセスできませんでした。元の関数のテーブル パラメーターは、次の形式で表示されます。
[[table:0x0989]] { [[table:0x23456]] str = "hello" width = 180 }, [[table:0x23489]] { str1 = "world" }
このように表示されますが、一度戻ると [[table:0x0989]] のようなテーブルのトップアドレスを取得できます..メインテーブル内に存在するテーブルにアクセスしようとすると、nil値が表示されます…なんて呼べばいいの?? 誰でも私を助けることができますか??
parameters - luabind-可変数のパラメーター
可変数のパラメーターを受け入れる関数をluabindにバインドするにはどうすればよいですか?基本的に、私は自分のprint()関数を書きたいと思っています。
パラメータとしてのluabindのクラスは、任意のデータ型を受け入れることができることを知っています。パラメータとしてのobject
動的テーブルを受け取るのが最善です。luabind::object
c++ - Luabind: "一致するオーバーロードが見つかりませんでした。候補:"
回答を読んで適用したことに注意してください: Luabind から C++ メンバー関数を呼び出すと、「一致するオーバーロードが見つかりません」が発生しますが、これで問題は解決しませんでした。
luabindを介してLUAに公開する単純なクラスがあります
バインディング コードは次のとおりです。
そして、ここに私のLUAがあります:
しかし、タイトルに記載されているエラーが発生します(これはログファイルから直接取得したものです):
私はこれで髪を引き裂いてきましたが、何が間違っているのかわかりません。誰でも光を当てることができますか?! :)
c++ - Luabindクラスでの新しいプロパティの作成を防ぐにはどうすればよいですか?
私はLuabindを使用してC++クラスをLuaにバインドしています。Luaスクリプトから、クラスを表すテーブルに任意のプロパティ(キーと値のペア)を追加できます。Luabindにこれらのプロパティが存在することを伝えたことがない場合でも、次のようになります。
カバのラインは無意味ですが、Luaエラーを発生させることなく実行されます。
これらの新しいプロパティを防ぐにはどうすればよいですか?Lua C APIのみを使用する場合、これは__newindexメタメソッドを使用して実行できることを知っていますが、Luabindでこれを行う方法はありますか?
c++ - Luabindでのアサーションの失敗
現在、Luabindを使用してLuaスクリプトAIをC++ゲームとインターフェースする際に問題が発生しています。
ループ内で更新関数を呼び出し(フレームごとに1回)、この関数はLuabindに登録されているC++関数から情報を取得します。
私の問題は次のとおりです。変動する予測不可能な時間が経過した後、Luabindでアサーションが失敗し、アサーションが発生します。Lua内を下降している間、エラーは常に/usr/include/luabind/wrapper_base.hpp:124で発生します。
あなたはそれを何ができるかについて何か考えがありますか?私のテストでは、C++とLUAで呼び出される関数は常に同じです。
問題の詳細:
wrapper_base.hppで失敗したアサーション周辺のコンテンツ
正確なエラー
c++ - C ++では、luabindを使用して、luaファイルで定義された関数を呼び出しますか?
私がluaファイルを持っているとしましょう:
luabindを使用してそのファイルをロードし、その関数を呼び出すにはどうすればよいですか?次のようになります。
しかし、これはエラーを返します: 'luabind :: error'のインスタンスをスローした後に呼び出された終了what():luaランタイムエラー中止
それで、私がやりたいことをするための適切な構文は何ですか?(エラーの見た目からは、luaファイルの構文に問題があるようですが、そうではないと思います...)
lua - ルバインドとコルーチン
luabind でコルーチンを適切に使用する方法を理解するのに苦労しています。テンプレート化された関数があります:
( ) には、LuaRet
から渡された値が含まれているはずです。yield
私の現在の混乱のポイントは次のとおりです。
- 関数が を呼び出すのではなく、返された場合はどうなります
yield
か?resume_function
関数の戻り値を返しますか? - どの (またはいくつの) パラメータが に渡されるか事前にわからない場合、この関数をどのように使用することになっています
yield
か? たとえば、可能性のある生成関数が複数ある場合、その関数は呼び出すことができます。 Ret
に複数の値が渡された場合の型はyield
?
これがどのように機能するかについて、私は完全に間違っていますか?このようなことを想定しています。Lua 側:
loadImage
は、画像を別のスレッドにロードするように要求してから を呼び出す C++ 関数でありlua_yield
、しばらくして でパラメータとしてluabind::resume_function
呼び出さimg
れます。
パラメータとして渡す必要が"foo.png"
ありますか?yield
を呼び出す前に別の関数に変更し、その後は?yield
に値を渡さないでください。yield
これを構造化する正しい方法は何ですか?私は明らかにここで何かを誤解しています。
c++ - luabind 派生メンバーをコルーチンとして呼び出す
luabind のドキュメントには、Lua 派生の仮想メンバーを C++ から呼び出すように記載されています。派生したラッパー クラスを作成し、次luabind::wrap_base
のように関数を呼び出します。
これまでのところとても良いです-私はこれだけ働いています。
しかし、(Lua 側で)BaseWrapper::foo()
オーバーライドされたものを で直接呼び出すのではなく、( を使用して)コルーチンとして呼び出すように実装するにはどうすればよいですか?foo
resume_function
call
これは、非メンバー関数で行う方法です。
私が知る必要があるのはfunc
、foo
(Lua 派生クラスによって実装されているように) 取得する方法であり、既存のresume_function
ロジックはそのまま機能するはずです。
c++ - オーバーロード関数と luabind に関する問題
lua にバインドしたいクラスがあります。削減されたコードは次のようになります。
コンパイルしようとすると、コンパイラがスローしてエラーが発生します。
問題の原因は、luabind が最適なオーバーロード関数を推測できなかったことだとわかっていますが、luabind のドキュメントを読んで、luabind で関数を正しく定義しています。
何か案は?
前もって感謝します
c++ - このスクリプトは非常に多くの閉鎖をもたらしますか? はいの場合、代替手段は何ですか?
Lua で GUI メッセージ処理システムを実装したいのですが、現在は次のように機能します。
C++ コードでは、ウィンドウには Windows API にあるようなウィンドウ プロシージャがあり、Lua でもこれに頼ろうとしています。
したがって、私のウィンドウにはluabind::object
、次のようなテーブルを指す があります
表の鍵は GUI メッセージです。Ele はウィンドウのハンドル、a はメッセージ、b と c はパラメーターです。
いくつかの関数の例です。
次のようにオブジェクトにバインドされます。
これはすべて同じスクリプト ファイル内にあり、(私の知る限り) ロード時に 1 回だけ実行されます。したがって、最初にテーブルが構築され、後でテーブルが にバインドされますluabind:::object
。このオブジェクトは、次のように C++ で呼び出されます。
したがって、メッセージが発生するたびにテーブルが呼び出され、毎回関数が返されると思います。スクリプト ファイルを 1 回だけロードしても、スクリプトをデバッグしてそこにブレークポイントを配置すると、アクション オブジェクトが呼び出されたときにブレークポイントがヒットするため、これを想定しています。
それは物事を処理する良い方法ですか?