我在我的应用程序中使用的是box2d。它有一个类b2Body
。它有一个属性void *userData
和它访问的方法。换言之:我们可以在那里存储一些关于物理身体的附加信息。我想在那里存储一些类对象:
MyClass *obj = new MyClass();
b2Body body;
body.SetUserData(obj);
现在我必须在python中获取用户数据!我编写了一个函数包装器,它返回提取的指针:
^{pr2}${I>当python中有一个空对象时,{。在
我试图用纯指针来存储智能指针,但是SetUserData
接口不允许这样做。在
有什么想法吗?在
升级版 导出到python:
bp::def("GetBodyUserData", &GetBodyUserData, boost::python::return_value_policy <boost::python::reference_existing_object>())
你只需要用C风格,也就是说,把指针传递给一个函数,并返回你想要的特定项。C++对象与Python对象不一样。在
而且Python甚至没有c++对象的定义,所以即使它们在内存中看起来一样,Python也可以使用它,因为它不知道它的内部值和函数是什么。在
记住指针只是一个表示对象内存地址的数字。在
所以假设您myclass有一个成员值,您希望能够从python中编辑它。在
你需要定义一个set-and-get函数
set函数应采用python值,然后将((MyClass*)obj)->;值设置为该值,而get函数将返回((MyClass*)obj)->;值
您还可以使用python构建一个具有适当设计的MyClass,并简单地调用C样式的函数。在
p.S
我相信也可以从C++中定义一个Python类,类似于你如何定义函数,但是我自己从来没有尝试过。在我希望这对你有帮助。在
相关问题 更多 >
编程相关推荐