私のアプリケーションではbox2dを使用しています。クラスはb2Body
です。プロパティーはvoid *userData
であり、そのメソッドはアクセスしています。換言すれば、私たちは物理的な身体に関するいくつかの追加情報をそこに保存することができます。私はそこにいくつかのクラスオブジェクトを格納したい:Pythonを使用してC++オブジェクトメンバポインタを取得します
MyClass *obj = new MyClass();
b2Body body;
body.SetUserData(obj);
私はPythonの中でユーザーデータを取得する必要があります!私はPythonでGetBodyUserData
を呼び出すときに私が空または「死んだ」オブジェクトを:(持って、今
MyClass *GetBodyUserData(b2Body &body)
{
void *userData = body.GetUserData();
if (userData) return (MyClass*)userData;
std::cout << "Fail.";
return nullptr;
}
私は、スマートポインタを格納しようとしたinsted:私は、抽出されたポインタを返す関数のラッパーを書きました。純粋な1のそれはSetUserData
インターフェイスで許可されていない。
任意のアイデア?
UPD のpythonへのエクスポート:
bp::def("GetBodyUserData", &GetBodyUserData, boost::python::return_value_policy <boost::python::reference_existing_object>())
あなたは何をしているのですか?どのようにポインタをPythonに渡していますか? –
"Fail?"が出力されますか? – Maxpm
@Maxpmいいえ、そうではありません。 – Ockonal