0
点赞
收藏
分享

微信扫一扫

boost reference_wrapper

绣文字 2023-04-10 阅读 76


reference_wrapper是一个引用类型的包装器

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_;
};


reference_wrapper就像是被包装对象的一个别名,但它只有在使用T的语境下才能够执行隐性转换,其他情况下则需要调用类型转换函数或get()函数才能真正被包装对象。


#include<boost/ref.hpp>
#include<assert.h>
#include<iostream>
using namespace std;
using namespace boost;
int main()
{
    int x=10;
    reference_wrapper<int> rw(x);
    assert(x==rw);
    (int &)rw=100;
    reference_wrapper<int> rw2(rw);
    assert(rw2.get()==100);
    cout << rw2.get() << endl;
    string str;
    reference_wrapper<string> rws(str);
    *rws.get_pointer() = "test reference_wrapper";
    cout << rws.get().size() << endl;
}

100
22

举报

相关推荐

0 条评论