2012-05-02 19 views
0

私は関数呼び出しを作るしようとしたとき、私は実際に実際にコンストラクタにLuaスクリプトをロードする機能をカプセル化しようとすると、Luaの呼び出しをカプセル化するC++でクラスを作成しようとしていますが、主な問題はあります私は複数の戻り値を格納する方法とすべての引数を正しくプッシュする方法を見つけることができません。Luaのカプセル化クラス

私は任意の数の任意のタイプのパラメータでルアフォントを呼び出す関数の実装のアイデアを見つけようとしています(関数は引数をプッシュして関数を呼び出しますが、たとえば、 "lua_pushnumber"やプッシュストリングが必要なのかどうかを知る例

+0

コードを投稿すると非常に便利です。 – Pubby

+0

問題は、私はこのコードを書く方法を知らない、私はすべてのパラメータを取得するためにva_argsを使用する必要がありますが、私はエレガントにプッシュするためにパラメータを形質する方法を見つけることができません知っている。 ;-) – Loadex

+0

あなたは[luabind](http://www.rasterbar.com/products/luabind.html)を見ましたか?それらは非常に良いC++スタイルのlua統合を提供します。多分あなたはそこにインスピレーションを見つけることができます。 – mkaes

答えて

0

コンストラクタにある種のバリアントクラスの配列を受け取り、それらの型を使用してそれらをLuaにポンピングする方法を決定できます。一方、実際には、C/C++とLuaの間で交換可能な2つの型があります:stringとnumber/double。可能な解決策は、文字列の配列(またはchar **とint、ifあなたも好きです)、文字列としてダブルスを渡します。

これで、文字列の文字列表現を追加したり、文字列 "return"の後にdoubleを追加して、loadstring()呼び出しを行うことができます。 loadstring()によってスタックにプッシュされた関数を実行すると、luaエンジンは変数(文字列または適切な型のdouble)をluaスタックにプッシュします。あなたのダブルスを文字列解析するオーバーヘッドがありますが、スピードが遅くなったら、C++でコーディングすることになります:)この方法の利点は、実際にこの方法で関数を渡すことができることです。つまり、 "return function()print(" hello "); end")

+0

あなたの答えをありがとう、私はこの方法でこれをやろうとします;-) – Loadex