Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检索C++;使用Python的对象成员指针_C++_Python_Pointers_Boost - Fatal编程技术网

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

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) {

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

您只需使用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>())