2009-06-11 62 views
2

boost::bind处理boost::shared_ptr与原始指针相同。是否有QPointer专用于boost :: bind

QObject * object(new QObject); 
boost::shared_ptr<QObject> sharedObject(new QObject); 

bind(&QObject::setObjectName, object, _1)("name"); 
bind(&QObject::setObjectName, sharedObject, _1)("name"); 

我很想有一个boost::bind,处理QPointers作为原始指针的指针。

QPointer<QObject> guardedObject(new QObject);  
// i want to write it like this 
bind(&QObject::setObjectName, guardedObject, _1)("name"); 
//now i have to do it like this 
bind(&QObject::setObjectName, bind(&QPointer<QObject>::data, guardedObject), _1)("name"); 

有没有人为QPointer做过专业化?

如果不是你知道从哪里开始或需要什么专业,所以我可以自己做。

+0

您正在使用什么版本的Qt? 4.5版中记录的QPointer类没有get方法。从它的外观你想要的语法应该工作... – 2009-06-11 13:47:03

+0

对不起,得到的是lambda/shared_ptr,对于QPointer它是数据 – TimW 2009-06-11 14:07:56

回答

5

添加get_pointer功能的此重载应该做的伎俩:

namespace boost { 
    template<typename T> T * get_pointer(QPointer<T> const& p) 
    { 
     return p; 
    } 
}