• 仿函数(又名函数对象)与仿函数配接器


    如果你不懂,为什么STL的很多容器构造函数或者其他什么函数,可以既接受一个函数指针,又可以接受函数对象,你应该看看下面的介绍:

    从实现来说,函数对象就是一个“行为类似函数”的对象,为了能够“行为类似函数”,其类别定义中必须自定义function call运算子(operator())。仿函数是为了STL能够实现更好的抽象性。仿函数主要用于STL中,当需要传入一个函数时使用。虽然通常来说我们可以直接传入一个函数指针,但是函数指针的抽象性不够强,同时函数指针也无法跟STL中其他组件搭配使用,所以仿函数还是有比较大的意义的。在STL中有很多仿函数,我们暂时不介绍它们。下面再看看仿函数配接器。

    配接器是一种设计模式,它在原有类型的基础上扩展成为另外一个接口,使原本因为接口不兼容而不能合作的类型可以一起工作。仿函数的配接操作包括bind(将二元仿函数的第一或者第二个参数固定为某个值),negate(逻辑否定,将某个一元或者二元仿函数的返回值取反),compose(组合调用,用一个函数的返回值作为另外一个的参数执行调用)以及对一般函数(辅助函数是ptr_fun)或者成员函数(辅助函数是mem_fun, mem_fun_ref)的修饰,使之成为一个仿函数。需要特别注意的是,配接器的参数是仿函数,返回值跟仿函数的返回值一致,极大可能不是仿函数,所以配接器不能组合使用:adaptor1(adaptor2)。为了配合配接器工作,每个配接器都有一个辅助函数,用于生成配接器对象。比如bind1st是binder1st的辅助函数。平时我们基本都是用辅助函数的,所以,不要以为辅助函数是配接器。

  • 相关阅读:
    WebService的使用
    Nginx的安装与部署
    Linux下安装mysql5.7
    SpringBoot之旅 -- 定时任务两种(Spring Schedule 与 Quartz 整合 )实现
    ELK 日志分析系统
    解决SpringBoot jar包太大的问题
    IntelliJ Idea 授权服务器使用
    Mybatis Generator最完整配置详解
    PyCharm2016.2专业版注册码
    HttpClient实现HTTP文件通用下载类
  • 原文地址:https://www.cnblogs.com/whyandinside/p/2723500.html
Copyright © 2020-2023  润新知