C++ 检索C++;使用Python的对象成员指针
我在应用程序中使用的是box2d。它有一个类C++ 检索C++;使用Python的对象成员指针,c++,python,pointers,boost,C++,Python,Pointers,Boost,我在应用程序中使用的是box2d。它有一个类b2Body。它有一个属性void*userData及其访问方法。换句话说:我们可以在那里储存一些关于身体的附加信息。我想在那里存储一些类对象: MyClass *obj = new MyClass(); b2Body body; body.SetUserData(obj); 现在我必须在python中获取用户数据!我编写了一个函数包装器,返回提取的指针: MyClass *GetBodyUserData(b2Body &body) {
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;
}
您只需使用C风格,即将指针传递到函数,并返回所需的特定项。C++对象与Python对象不一样。
也不知道Python有C++对象的定义,所以即使它们在内存中看起来相同,Python也可以使用它,因为它不知道它的内部值和函数是什么。 记住指针只是一个表示对象内存地址的数字
假设myclass有一个成员值,您希望能够从python中编辑该值 您需要定义一个set和get函数 set函数应该获取一个python值,然后将((MyClass*)obj)->值设置为此值,而get函数将返回((MyClass*)obj)->值 您还可以用python构造一个具有适当设计的MyClass,并简单地调用C风格的函数 附言 <>我相信也可以从C++中定义一个Python类,类似于你如何定义函数,但是我自己从来没有尝试过。我希望这对您有所帮助。从C++的角度看,您所做的一切都非常好。如何将指针传递给Python?
bp::def("GetBodyUserData", &GetBodyUserData, boost::python::return_value_policy <boost::python::reference_existing_object>())