Luabind、toLua ++、またはその他のライブラリ(ある場合はどれ)を使用しますか、それともまったく使用しませんか?
それぞれのアプローチについて、賛否両論は何ですか?
基本型と静的 C 関数を Lua にバインドするのは些細なことですが、テーブルとメタテーブルを扱い始めると状況は変わります。物事は非常に急速に複雑になります。
LuaBind は機能しているように見えますが、哲学的な問題があります。私の友人が言ったように、あなたの型がすでに複雑である場合、Luabind が頻繁にテンプレート化されているという事実は、あなたのコードに従うことを容易にしないように思えます. . さらに、Boost に依存し、さらにコンパイル時間が深刻な打撃を受けるなどです。
いくつかのバインディングを試した後、Tolua++ が最適なようです。Tolua はあまり開発されていないようですが、Tolua++ は問題なく動作しているようです (さらに、そこにある「Tolua」チュートリアルの半分は、実際には「Tolua++」チュートリアルです。それを信じてください:) Tolua は正しいものを生成しますもの、ソースは変更でき、複雑なケース(テンプレート、ユニオン、名前のない構造体など)を処理するようです
Tolua++ の最大の問題は、適切なチュートリアル、事前に設定された Visual Studio プロジェクトの欠如、またはコマンド ラインに従うのが少し難しい (パス/ファイルに空白を含めることはできません - 少なくとも Windows では) ことです。 -など) それでも、私にとっては勝者です。
私自身の質問に部分的に答えるには:
Luabind: この厄介なテンプレート構文を使用してメソッドとクラスをバインドする方法を理解すれば、新しいバインディングを追加するのは非常に単純で簡単です。ただし、luabind はパフォーマンスに大きな影響を与えるため、リアルタイム アプリケーションには使用しないでください。スタックを直接操作する C 関数を呼び出すよりも、約 5 ~ 20 倍のオーバーヘッドが発生します。
バインディングには生のLuaAPIを使用し、シンプルに保ちます。API自体(AUXライブラリ)とLuaの作成者によるライブラリからインスピレーションを得てください。
いくつかの練習では、生のAPIが最良のオプションです-最大の柔軟性と最小の不要なオーバーヘッド。あなたはあなたが望むものを手に入れましたが、それ以上はあなたが必要とする方法を手に入れました。
大規模なサードパーティライブラリをバインドする必要がある場合は、tolua、tolua ++などの自動ジェネレータを使用します(または、特定の場合に独自のジェネレータをロールします)。それはあなたを手作業から解放するでしょう。
Luabindの使用はお勧めしません。現時点では、開発は停滞しています(ただし、復活し始めています)。コーナーケースに遭遇した場合は、自分で判断することもできます。また、Luabindはテンプレートメタプログラミングを多用しています。観点によっては、これは受け入れられない場合があります(受け入れられない場合もあります)。
私はライブラリを使用しません。しばらく前に SWIG を使用して C ライブラリを公開しましたが、オーバーヘッドが大きすぎたため、使用をやめました。
長所はパフォーマンスの向上と制御の向上ですが、書き込みに時間がかかります。