gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:09:08 24 4
gpt4 key购买 nike

我在我的应用程序中使用 box2d。它有一个类 b2Body。它有一个属性 void *userData 和它访问的方法。换句话说:我们可以在那里存储一些关于物理 body 的额外信息。我想在那里存储一些类对象:

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 接口(interface)不允许这样做。

有什么想法吗?


更新导出到 python:

bp::def("GetBodyUserData", &GetBodyUserData, boost::python::return_value_policy <boost::python::reference_existing_object>())

最佳答案

你只需要用 C 风格来做,即将指针传递给一个函数,返回你想要的特定项目。 C++ 对象与 Python 对象不同。

而且 Python 甚至没有你的 c++ 对象的定义,所以即使它们在内存中看起来相同,python 也可以使用它,因为它不知道它的内部值和函数是什么。

请记住,指针只是一个代表对象内存地址的数字。

假设您的 myclass 有一个您希望能够从 python 编辑的成员值。

你需要定义一个set和get函数

set 函数应该接受一个 python 值,然后将 ((MyClass *)obj)->value 设置为此值,而 get 函数将返回 ((MyClass *)obj)->value

您还可以在具有适当设计的 Python 中构造一个 MyClass,并简单地调用 C 风格的函数。

附言

我相信也可以从 C++ 定义 python 类类型,类似于您定义函数的方式,但我自己从未尝试过。

希望对你有帮助

关于c++ - 使用 Python 检索 C++ 对象成员指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6526697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com