function object研究之十二 reference_wrapper

来源:互联网 发布:playingwithshiro软件 编辑:程序博客网 时间:2024/05/16 11:15

reference_wrapper模板:(ref.hpp文件中)

template<class T> class reference_wrapper{ public:    typedef T type;#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1300 )    explicit reference_wrapper(T& t): t_(&t) {}#else    explicit reference_wrapper(T& t): t_(boost::addressof(t)) {}#endif    operator T& () const { return *t_; }    T& get() const { return *t_; }    T* get_pointer() const { return t_; }private:    T* t_;};

有了前面分析addressof的基础,理解此模板很简单。

功能就是:

1.保存T& t 的地址到内部指针成员T* t_中。

2.提供get方法获取T&

3.提供get_pointer获取T*


再看看相关的几个模板函数:

template<class T> inline reference_wrapper<T> BOOST_REF_CONST ref(T & t){     return reference_wrapper<T>(t);}template<class T> inline reference_wrapper<T const> BOOST_REF_CONST cref(T const & t){    return reference_wrapper<T const>(t);}

第一个将t包装成reference_wrapper<T>

第二个将t包装成reference_wrapper<T const>


原创粉丝点击