私は、クラス数が150 +以上のC++プロジェクトに取り組んでいます。それぞれには10〜300フィールド程度あります。私は本当にテスト用スクリプトインターフェイスを提供して、再コンパイルを必要としないコールバックをコーディングできるようにしたいと考えています。私はLuaでこれをしたいと思っています。なぜなら私はPythonのものよりもC APIをよく知っていますが、それが頭痛を救うのであれば、Pythonでうれしいでしょう。Swig経由でC++とLua間の変数を渡す
私はC++からLua関数を呼び出す方法をしっかりと把握しており、基本データ型を前後に渡す方法を知っています。私が持っている質問は、SWIGを使用して2つの間でユーザー指定のデータ型を共有する方法です。
たとえば、私のC++のある時点で、250のフィールドを持つオブジェクトのメンバーデータをいくつか評価したいと思うかもしれません。そのオブジェクトをLuaに渡して、生成されたSWIGラッパーを使用してそのオブジェクトを操作し、特定のフィールドを表示し、(潜在的に変更された)オブジェクトをC++に渡して継続的に使用できるようにすることができます。
また、ラッパーを使用してオブジェクトのインスタンスをインスタンス化し、それをC++に渡して、オブジェクトの通常のC++バージョンとして使用することもできます。
これは可能ですか?誰かがチュートリアルや明示的な例を教えてくれますか?
ご協力いただきありがとうございます!
リンクをいただきありがとうございます。一方通行だけでも大きな助けとなります。 Luaでオブジェクトの新しいインスタンスを作成してC++に渡すことができない場合でも、Luaに渡された既存のC++オブジェクトを変更できるかどうか知っていますか?つまり、C++オブジェクトを作成してLuaに渡し、Luaでいくつかのフィールドを変更してから、C++で更新されたフィールドを使用して再開できますか? – zslayton
はい、もちろんです。 LUAのオブジェクトを(SWIGによって提供されるインタフェースを介して)変更すると、実際には基礎となるC++オブジェクトが変更されます。それはかなりシームレスです。 SWIGは、配列、STL、ポインタ、ファクトリ型関数、演算子ベースのクラスインタフェース(スマートポインタを含む)などの言語機能でも、 – ASk