Есть ли специализация QPointer для boost :: bind - PullRequest
2 голосов
/ 11 июня 2009

boost::bind обрабатывает boost::shared_ptr так же, как необработанные указатели.

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?

Если вы не знаете, с чего начать или что нужно специализировать, чтобы я мог сделать это сам.

1 Ответ

5 голосов
/ 11 июня 2009

Добавление этой перегрузки функции get_pointer должно помочь:

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