带Python的智能指针

2024-06-26 00:13:54 发布

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

我的应用程序在C++ API中使用qSysDePosits,在这里,它不返回对象,而是返回一个智能指针,每个类都有一个附带的Type,以方便使用。在

class SomeClass
{
 SomeClassP getInstance() { return SomeClassP(new SomeClass()); }
}
typedef QSharedPointer<SomeClass> SomeClassP;

这很有效,但我想知道我的设计是否需要修改以处理PythonQt集成。例如,在pythonqtwarker中,我应该从指针返回什么?如果我在python中处理指针,那么如何调用其他接受智能指针而不是普通指针的函数?我需要向PythonQt公开智能指针吗?python中的指针似乎自动处理了很多问题。我的案子需要做些什么?是否应该在C++中添加附加函数,接受非智能指针,将指针简单地包装在智能指针中,并将其发送到智能指针接受函数?pythonapi似乎有一些关于指针所有权的相当复杂的规则。在

^{pr2}$

Tags: 对象函数api应用程序智能type附带class
1条回答
网友
1楼 · 发布于 2024-06-26 00:13:54

我们正面临着同样的问题,而且还没有一个好的解决方案。在

早期的方法是添加返回原始指针的函数变量。然后我们去掉了这些,现在在PythonQt中装饰智能指针,这样py代码就可以对它们调用.get()来获取原始指针。这就是我如何第一次尝试性地切换到那种风格:(fromhttps://github.com/realXtend/naali/commit/e72cb827c7fcbaee27b8258e616ee7bd2835fbd7

//Ptr conversions, not automatic but with an explicit call
int scenePtr_id = qRegisterMetaType<ScenePtr>("ScenePtr");
QObject* TundraDecorator::get(ScenePtr* self)
{
    return self->get();
}

我不确定这是否安全,但似乎有效。如果有更好的解决方案我很感兴趣。在

相关问题 更多 >