0

luabindに問題があります。luaで作成されたオブジェクトを割り当てるためにstd::mapを定義します。このマップをluaのグローバルオブジェクトとして次のように公開します。

luabind::globals(L)["g_SceneManager2D"] = this;

その後、このオブジェクトはluaの関数に使用され、そこで多くのオブジェクトが作成され、このマップに挿入されます。この問題は、lua関数が終了し、luabindが制御をC ++サイドプログラムに戻すときに発生します。これは、マップのすべてのコンテンツが自動的に失われるためです。

エラーを探していました。luaコンテキストを存続させるため、このオブジェクトが存在する必要があります。

私たちを手伝ってくれますか??

どうもありがとう :)

4

2 に答える 2

1

shared_ptr<>(this)生ではなく使用することをお勧めしますthisboost::shared_from_this役立つかもしれません。クラスもLuabindを使用して登録されていること、およびがclass_によって保持されているものとして指定されていることを確認してくださいshared_ptr

もう1つの楽しいアイデアは、Lua関数が「マップ」をLuaテーブルとして生成し、それを返すようにすることです。C++でそれを繰り返し処理して、を構築できますstd::map

于 2011-01-16T15:10:22.750 に答える
1

私があなたの問題を正しく理解しているなら、あなたはLuaでオブジェクトを作成しているようです。それをマップに挿入し(LuaまたはC ++を介して)、その後失われます。コードを追加しないと、問題が何であるかを正確に判断するのは困難です。ただし、最初にそれらのオブジェクトが実際に作成されていることを確認し(再確認)、次にLuaがそれらをガベージコレクションしていないことを確認します。Luaが実際にそれらのオブジェクトをガベージコレクションしている場合、それらはなくなっているため、C++側では表示されません。

それが役に立ったら、私は似たようなことをするプロジェクトを仕上げています。LuaからC++オブジェクトを作成して取得する必要がありましたが、Luaでオブジェクトを作成する代わりに、C ++関数を呼び出して、Lua呼び出し(Luabindによってバインドされた)で必要なデータを送信しました。これらの(C ++)関数は、IDによってオブジェクトをハッシュテーブルにインデックス付けし、操作のためにオブジェクトのスクリプト側を取得する必要がある場合に備えて、IDがLuaに返されました。この設定により、メモリを正しく処理することがより簡単に(そしてより安全に)なり、Luaがオブジェクトをガベージコレクションするのを防ぎます。

于 2011-01-17T11:28:05.853 に答える