1

Lua を使用してスクリプトを作成し、C++ に埋め込みます。このプロセスではLuaBridgeを使用します。

私の Lua スクリプトには、C++ で使用するために最初に取得する必要がある変数がいくつかあります。さらに、非常に単純な関数があります。

run = function()
    print ("state is on!")
end

ただし、この関数は特定の条件下でのみ呼び出されますつまり、一連の複雑な計算の後でC++ コードから "true" が得られた場合にのみ呼び出されます。

私のLuaとLuaBridgeの知識によって制限されていますが、私が知っていることは次のとおりです。

loadscript(L, "script.lua")
lua_pcall(L,0,0,0)

を使用して、Lua スクリプトから変数と関数を読み取ることができます

LuaRef blabla = getGlobal(L, "blabla")

しかし今、変数を読み取って最初に使用し、次にメンバー関数で使用する必要があります

LuaRunner::LuaRun(){}

別の C++ クラスで定義

class LuaRunner

条件が確定され、条件が「真」の場合、この run() 関数が呼び出されます。この run() 関数を C++ メンバー関数で直接呼び出すのが最善です。

LuaRunner::LuaRun(){}

さらなる処理の制限のため。

したがって、これが可能かどうか疑問に思っていました:

を使用して関数を読み取る

LuaRef run = getGlobal(L, "run")

最初に他の変数と一緒にこの run() 関数を C++ コードのどこかに (おそらくクラス メンバー関数として) 「保存」します。クラス。これは可能でしょうか?可能であれば、どのように行うのですか?または他の良いアイデアはありますか?

4

1 に答える 1

1

luabridge::LuaRefを C++ に保存して、通常他の関数を呼び出すのと同じように後で呼び出すことができます。ただし、 LuaRefをどこにも保存する必要がない場合もあります。スクリプトをロードすると、関数を nil に設定するか、関数に同じ名前を使用する別のスクリプトをロードして上書きしない限り、すべての関数はlua_Stateのままになります。getGlobal関数を使用して取得できます。Lua 関数が引数を取る場合、次のようにLuaRef のoperator()を使用して渡すことができます。

if(...) { // your call condition
    LuaRef f = getGlobal(L, "someFunction");
    f(arg1, arg2, ...); // if your function takes no arguments, just use f();
}
于 2015-11-14T07:21:25.297 に答える