使用Python检索C++对象成员指针

2024-06-16 12:28:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的应用程序中使用的是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>())

Tags: 对象方法obj应用程序属性myclassbodyboost
1条回答
网友
1楼 · 发布于 2024-06-16 12:28:49

你只需要用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类,类似于你如何定义函数,但是我自己从来没有尝试过。在

我希望这对你有帮助。在

相关问题 更多 >