当前位置:  开发笔记 > 编程语言 > 正文

tr1 :: reference_wrapper如何有用?

如何解决《tr1::reference_wrapper如何有用?》经验,为你挑选了2个好方法。

最近我一直在阅读Scott Meyers的优秀Effective C++书籍.在最后一个提示中,他介绍了TR1的一些功能 - 我通过Boost知道了很多功能.

但是,有一个我绝对不认识:tr1 :: reference_wrapper.

如何以及何时使用tr1 :: reference_wrapper?



1> Nick..:

就像我所知,它就像boost :: ref.基本上,可以复制的参考.绑定到需要通过引用传递参数的函数时非常有用.

例如(使用boost语法):

void Increment( int& iValue )
{
    iValue++;
}

int iVariable = 0;
boost::function< void () > fIncrementMyVariable = boost::bind( &Increment, boost::ref( iVariable ));

fIncrementMyVariable();

这篇Dobbs博士的文章有一些信息.

希望这是对的,也很有帮助.:)


@ceretullis ref是生成reference_wrapper 对象的构造函数方法,其中T是一个类型.

2> amit..:

reference_wrapper是一个非常有用和简单的图书馆.在内部reference_wrapper存储指向T的指针.但它公开的接口不包含任何指针表示法.

它允许引用表现得像其他简单对象 - reference_wrapper可以存储在STL容器中.

它有助于避免可怕的指针表示法 - 导致如此多的分段错误.用替换指向T的指针reference_wrapper被引用和,指针T->f()T.f()尽可能(ofcourse指针需要存储删除堆分配的对象,但对内存管理升压指针容器是非常有用).

例:

class A
{
    //...
};

class B
{
 public:
   void setA(A& a) 
   {
     a_ = boost::ref(a); // use boost::cref if using/storing const A&
   }
   A& getA()
   {
      return a_;
   }
   B(A& a): a_(a) {}
private:
   boost::reference_wrapper a_; 
};

int main()
{
   A a1;
   B b(a1);
   A a2;
   b.setA(a2);
   return 0;
}

这里我使用了参考包装器的boost实现,但是C++ 0x标准也将使用它.另见http://aszt.inf.elte.hu/~gsd/halado_cpp/ch11.html#Bind-ref

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有