首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PythonQt的智能指针

使用PythonQt的智能指针
EN

Stack Overflow用户
提问于 2011-11-29 23:49:42
回答 1查看 366关注 0票数 0

我的应用程序在整个typedef中使用QSharedPointers,它通常返回一个指向该对象的智能指针,并且每个类都有一个附带的C++,以方便使用。

代码语言:javascript
运行
复制
class SomeClass
{
 SomeClassP getInstance() { return SomeClassP(new SomeClass()); }
}
typedef QSharedPointer<SomeClass> SomeClassP;

这很好用,但我想知道如何/是否需要修改我的设计来处理PythonQt集成。例如,在PythonQtWrapper中,我应该从指针返回什么?如果我在python中处理指针,我如何调用其他接受智能指针而不是普通指针的函数呢?我需要向PythonQt公开智能指针吗?似乎在boost::python中,很多智能指针的东西都是自动处理的。在我的情况下,需要做些什么?我是否应该在C++中添加接受非智能指针的附加函数,这些非智能指针只是将指针包装在智能指针中,并将其发送到智能指针接受函数?关于指针所有权,python API似乎有一些相当复杂的规则。

代码语言:javascript
运行
复制
class PythonQtWrapper_SomeClass : public QObject
{
   Q_OBJECT
public slots:
   SomeClass* new_SomeClass() { return new SomeClass(); }
   void delete_Mesh(SomeClass* obj) { delete obj; }
   SomeClass* static_SomeClass_build(int foo) {
       SomeClassP ack = SomeFactory::build(foo);
       return ?
   }
};
EN

回答 1

Stack Overflow用户

发布于 2012-03-14 05:14:21

我们也遇到了同样的问题,而且还没有一个很好的解决方案。

早期的做法是添加函数的变体,而不是返回原始指针。然后我们去掉了它们,现在我在PythonQt中修饰智能指针,这样py代码就可以在它们上调用.get()来获得原始指针。这就是我第一次尝试切换到这种风格的方式:(来自https://github.com/realXtend/naali/commit/e72cb827c7fcbaee27b8258e616ee7bd2835fbd7 )

代码语言:javascript
运行
复制
//Ptr conversions, not automatic but with an explicit call
int scenePtr_id = qRegisterMetaType<ScenePtr>("ScenePtr");
QObject* TundraDecorator::get(ScenePtr* self)
{
    return self->get();
}

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8313651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档