zoukankan      html  css  js  c++  java
  • 适配器

    仿函数

    仿函数(Functors)也叫函数对象(function objects),即一种具有函数特质的对象,这种东西在调用者可以像函数一样的被调用。

    仿函数的作用

    从STL所提供的各个算法往往有两个版本,版本一表现出最常用的某种运算,第二个版本表现出最泛化的演算流程,允许用户以template参数来指定所要采用的行为操作。

    将该操作设计为一个所谓的仿函数(语言层面是个class),再以该仿函数产生一个对象,并以此对象作为算法的一个参数。
    除了上述仿函数的思路,我们还可以将该操作设计为一个函数,再将函数指针当做一个算法的参数,但是函数指针毕竟不能满足STL对抽象性的要求,也不能满足软件积木的要求——函数指针无法和STL其他组件搭配,产生更灵活的变化。

    如何实现仿函数

    仿函数实际上就是一个行为类似函数的对象,所以我们需要在类别定义中自定义(改写、重载)function call运算子(operator())。有了这样的运算子后,我们就可以在仿函数对象的后面加上一对小括号,以此调用仿函数所定义的operator()。

    仿函数的分类

    • 按照功能划分:算术运算、关系运算、逻辑运算
    • 操作数个数划分:一元、二元
      例如算术类:
    template<class T>
    struct plus:public binary_function<T,T,T> {
        T operator()(const T&x,const T&y) const
        {
            return x+y;
        }
    }
    

    仿函数的可适配操作

    当被adaptable改造的时候,adaptor可能会问这些问题,所以仿函数想要融入STL这个大家庭必须要继承了其中一个class,便自动拥有了那些型别,也就拥有了配接能力。

    unary_function

    unary_function是用来呈现一元函数的参数型别和返回值型别。

    template<class Arg, class Result>
    struct unary_function {
        typedef Arg argument_type;
        typedef Result result_type;
    }
    

    binary_function

    binary_function用来呈现二元函数的第一参数型别,第二参数型别以及返回值型别。

    template <class Arg1,class Arg2,class Result>
    struct binary_function {
        typedef Arg1 first_argument_type;
        typedef Arg2 second_argument_type;
        typedef Result result_type;
    }
    
  • 相关阅读:
    manjaro 安装mysql
    Ubuntu安装Redis
    Ubuntu安装docker
    VirtualBox 安装 Ubuntu虚拟机 显卡驱动
    ubuntu 卸载软件
    Linux下环境变量设置的三种方法:
    error: open of glibc-devel-2.12-1.132.el6.i686.rpm failed: 没有那个文件或目录
    ip地址0.0.0.0与127.0.0.1的区别(转载)
    cmake的安装和卸载
    qmake 提示 Failure to open file:****
  • 原文地址:https://www.cnblogs.com/ccpang/p/12284046.html
Copyright © 2011-2022 走看看