2009-06-11 87 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; 
    } 
}