STL 源码剖析笔记之仿函数

Posted xiongping_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL 源码剖析笔记之仿函数相关的知识,希望对你有一定的参考价值。

仿函数(functor)的概念

在我们写 代码时有时会发现有些功能实现的代码,会不断的在不同的成员函数中用到,但是又不好将这些代码独立出来成为一个类的一个成员函数。但是又很想复用这些代码。写一个公共的函数,可以,这是一个解决方法,不过函数用到的一些变量,就可能成为公共的 全局变量,再说为了复用这么一片代码,就要单立出一个函数,也不是很好维护。这时就可以用仿函数了,写一个简单类,除了那些维护一个 类的成员函数外,就只是实现一个 operator(),在类实例化时,就将要用的,非参数的元素传入类中。这样就免去了对一些公共变量的全局化的维护了。又可以使那些代码独立出来,以便下次复用。而且这些仿函数,还可以用关联,聚合,依赖的类之间的关系,与用到他们的类组合在一起,这样有利于资源的管理(这点可能是它相对于函数最显著的优点了)。如果在配合上模板技术和policy编程思想,那就更是威力无穷了,大家可以慢慢的体会

仿函数定义:就是用起来像函数一样的类,即针对class进行operator()重载

仿函数与函数指针相比的优点:

        1.可以有自己的状态,可以有自己的成员变量

        2.可适配性---(functor adapter)


简单实例:

struct detach

      void operator()(thread &t)
      
              t.detach();
       
;

上面的detach就是一个仿函数可以跟函数一样调用:

detach(thread);


STL源码剖析的示例如下:

template <typename T>
struct plus

    T operator()(const T &x, const T &y) const
    
         return x+y;
    
plus<int> plusobj;
std::cout <<plusobj(3,5)<<std::endl;




以上是关于STL 源码剖析笔记之仿函数的主要内容,如果未能解决你的问题,请参考以下文章

Stl源码剖析读书笔记之Alloc细节

stl源码剖析学习笔记traits编程技法简明例程

《STL 源码剖析》学习笔记之容器vector

STL 源码剖析读书笔记四:序列式容器之 dequestackqueue

《STL 源码剖析》学习笔记之容器list

STL源码剖析之组件