1

C++ Classes コンストラクターを Lua に登録する最良の方法を見つけようとしています (コーディングの観点ではなく、ソフトウェア設計の観点から)

どうすればいいですか?

私のアイデア:

1) Lua で使用できるようにしたい各 C++ コンストラクターをバインドする「init Lua bindings」ファイルを作成しますか? (問題: このファイルはどんどん大きくなり、同期/デバッグが困難になる傾向があります)

2) 各クラスは、自分の「LuaManager」クラスに独自のコンストラクターを登録する責任があります (問題: 種類 A の同じクラスに対して同じコンストラクターを何度も Lua にバインドするのはばかげているため、理想的には、各種類のスクリプト可能なこのアプローチを使用する場合、クラスはそのコンストラクターを Lua に一度だけバインドする必要があります。)

アイデア、または意見は大歓迎です。

4

2 に答える 2

1

私はあなたが尋ねることによって何を意味するのか理解しています

コーディングの観点ではなく、ソフトウェア設計の観点から

ただし、この2つに明確な違いがあるかどうかはわかりません。または、より正確には、採用するコーディングアプローチによって設計オプションが決まります。たとえば、SWIGを使用する場合、別の「インターフェイス」ファイルを作成するため、質問のオプションは実際には意味がありません。luabindを使用している場合、オプションは理にかなっていますが、1)を選択します。その場合、luabindヘッダーはコンパイルを大幅に遅くし、できるだけ少ないコンパイル単位に含めるようにします。あなたの「コーディング」アプローチにそのような厄介な欠点がない場合は、2)より賢明なことのように思われます。

于 2010-06-19T08:58:06.683 に答える
0

2番目のアプローチはうまく機能します。複数の登録を回避する1つの方法は、静的初期化リストアプローチを使用することです。各クラスは、Lua登録関数を静的std ::setpre-mainに追加します。次に、アプリケーションの起動時にこのstd :: setをウォークし、Luaランタイムにバインドする各クラスコンストラクターを追加します。これにより、クラスバインディングが1回だけ登録されるようになります。

于 2010-08-19T00:45:34.013 に答える