【发布时间】:2011-06-29 20:16:03
【问题描述】:
我在我的应用程序中使用 box2d。它有一个类b2Body。它有一个属性void *userData 和它的访问方法。换句话说:我们可以在那里存储一些关于实体的附加信息。我想在那里存储一些类对象:
MyClass *obj = new MyClass();
b2Body body;
body.SetUserData(obj);
现在我必须在 python 中获取用户数据!我写了一个函数包装器,它返回提取的指针:
MyClass *GetBodyUserData(b2Body &body)
{
void *userData = body.GetUserData();
if (userData) return (MyClass*)userData;
std::cout << "Fail.";
return nullptr;
}
现在,当我在 python 中调用 GetBodyUserData 时,我有一个空对象或“死”对象:(。
我尝试存储纯智能指针,但SetUserData 接口不允许。
有什么想法吗?
更新 导出到python:
bp::def("GetBodyUserData", &GetBodyUserData, boost::python::return_value_policy <boost::python::reference_existing_object>())
【问题讨论】:
-
你所做的非常好,C++ 明智的。你如何将指针传递给 Python?