zoukankan      html  css  js  c++  java
  • 强大的 function adapters

    void printElem(int elem, const char* prefix){
        cout << prefix << elem << endl;
    }
    for_each(vec.begin(), vec.end(), bind2nd(ptr_fun(printElem), "Element: "));

    1. C++ template

    STL 缘何称之为标准模板库;

    • 容器是以 class templates 完成;
    • 算法以 function templates 完成;
    • 仿函数是一种将 operator() 重载的 class templates;
    • 迭代器则是一种将 operator++ 和 operator* 等指针习惯行为重载的 class template

    配接器(adapter),用于容器迭代器身上的配接器,也是一种 class templates;
    那么应用于仿函数身上的配接器,如何能够“事先”对一个函数完成:

    • 参数的绑定;
    • 执行结果的否定;
    • 多方函数的组合;

    最后修饰结果(视为一个表达式,expression)将被传递给 STL 算法使用,STL 算法才是真正使用这个表达式的主格(调用者),显然,只有在真正使用(调用)某个函数(或仿函数)时,才有可能对参数和执行结果做任何干涉。

    配接器:

    • 应用于容器上:container adapters:
      • 内藏了一个 container member
    • 应用于迭代器:iterator adapters:
      • 比如像 reverse iterator(adapters)内藏了一个 iterator member
      • 像 stream iterator(adapters)内藏了一个 pointer to stream
    • 应用于函数:function adapters:
      • 内藏了一个 member objects,其类型等同于它所要配接的对象(该对象显然是一个可配接的仿函数,adaptable functor)
  • 相关阅读:
    进程间通信之数据共享--共享内存
    进程间通信之分工协作-信号灯
    进程间通信之分工协作--锁
    进程间通信之事件通知--信号
    进程间通信之数据传输--Socket
    c++模板特化
    DAG模型:嵌套矩形
    数字三角形
    c柔性数组结构成员
    模板
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9423644.html
Copyright © 2011-2022 走看看