【问题标题】:Is there a QPointer specialization for boost::bind是否有针对 boost::bind 的 QPointer 专业化
【发布时间】:2009-06-11 13:31:02
【问题描述】:

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::bindQPointers 处理为原始指针指针。

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

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

【问题讨论】:

  • 您使用的是什么版本的 Qt? 4.5 版中记录的 QPointer 类没有 get 方法。从它的外观你想要的语法应该可以工作......
  • Sorry get 是 lambda/shared_ptr,对于 QPointer 它是 data
  • 模板参数推导意味着 QPointer 参数的类型推导为 QPointer,即使它们有一个运算符 T*() const。

标签: c++ qt boost-bind qpointer


【解决方案1】:

添加get_pointer 函数的重载应该可以解决问题:

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

【讨论】:

  • 这不是特化,而是重载,其解析规则略有不同。重要的是要记住如果你混合两者(你不应该,真的)。见 Herb Sutter:gotw.ca/publications/mill17.htm
猜你喜欢
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多