boost::ref

背景

STL和Boost中的算法和函数大量使用了函数对象作为判断式或谓词参数,而这些参数都是传值语义,算法或函数在内部保留函数对象的拷贝并使用。

值传递不可行的情况:

  1. 作为参数的函数对象拷贝代价过高(具有复杂的内部状态)。
  2. 不希望拷贝对象(内部状态不应该改变)。
  3. 拷贝是禁止的(noncopyable、单件)。

ref

reference_wrapper is primarily used to "feed" references to
function templates (algorithms) that take their parameter by
value. It provides an implicit conversion to T&, which
usually allows the function templates to work on references
unmodified.

reference_wrapper 主要的作用就是传递引用给函数模板。类摘要如下:

template class reference_wrapper
{
public:
    explicit reference_wrapper(T& t): t_(t) {}

    operator T& () const { return *t_; }

    T& get() const { return *t_; }
    T* get_pointer() const { return t_; }

private:
    T* t_;
};

boost::reference_wrapper 提供了隐式转换(implicit conversion)成 T&.
boost::reference_wrapper 同时支持拷贝构造和赋值(普通的引用不能赋值)

两个工厂函数

表达式boost::ref(x)返回boost::reference_wrapper(x)
表达式boost::cref(x)返回boost::reference_wrapper(x)

template reference_wrapper ref( T & t )
{
    return reference_wrapper(t);
}
template reference_wrapper cref( T const & t )
{
    return reference_wrapper(t);
}

B

你可能感兴趣的:(boost::ref)