3

Luaスクリプト内で、別のC++オブジェクトからC++オブジェクトへの参照を取得するにはどうすればよいですか? それを言葉で適切に要約する方法がよくわからないので、最初にLuaの例で詳しく説明しましょう。

function doSomething()
    compo = a:getComponent()
    compo:setVariable(0)
end

a は C++ オブジェクトであり、関数 getComponent はポインターを返します。

// inside A.h
Component* A::getComponent();

問題はgetComponent()、参照ではなく Component オブジェクトのコピーを Lua に渡すことです。ポインターを返すすべての関数で同じ問題が発生します。Lua は元のオブジェクトを変更できません。

オブジェクト a は正しく動作しているようです。Lua 内から変数を変更すると、その結果が C++ にミラーリングされます。A とコンポーネントの両方がすでに Lua にバインドされており、必要なメソッドもバインドされています。

構文的に何かが欠けていますか、それ以上のものがありますか?

luabind、Lua 5.1、および MinGW を使用しています。事前に助けてくれてありがとう。

編集

これが luabind コードです。問題とは関係のないバインドが他にもたくさんあるため、要約しました。

luabind::class_<A>("A")
    .def("getComponent", &A::getComponent)
4

1 に答える 1

0

「コンポーネント」の Lua ラッパーも作成します。次にa:getComponent()、C++ オブジェクトの実際の参照ではなく、Lua オブジェクトを返すようにします。その新しいラッパー オブジェクトに必要なメソッドを追加します。「オブジェクト」がさらにある場合は、すすぎ、繰り返します。

つまり、Lua から操作したいオブジェクトごとに、Lua ラッパーを作成する必要があります。これを回避する唯一の方法は、最上位オブジェクトに追加の関数を作成し、それらを Lua ( +a:setComponentVariable(0)の代わりに) から呼び出すことです。a:getComponent()compo:setVariable(0)

于 2013-03-21T16:33:00.660 に答える