zoukankan      html  css  js  c++  java
  • Effective_STL 学习笔记(四十) 使仿函数类可适配

    假设有一个 Widget* 指针和 list 和一个函数来决定指针是否确定一个有趣的 Widget:

    1   list<Widget*> widgetPtrs;
    2   bool isInteresting( const Widget* pw );

    找到第一个有趣的 Widget :

    1   list<Widget*>::iterator i = find_if( widgetPtrs.begin(), widgetPtrs.end(), isInteresting );
    2   if( i != widgetPtrs.end() )
    3   {
    4     . . .
    5   }

    找到第一个不有趣的 Widget:

    1   list<Widget*>::iterator i = find_if( widgetPtrs.begin(), widgetPtrs.end(), 
    2                   not1(isInteresting) );  // 不能编译   

    取而代之,必须对 isInteresting 应用 ptr_fun 在应用 not1 之前:

    1   list<Widget*>::iterator i = find_if( widgetPtrs.begin(), widgetPtrs.end(),
    2                          not1( ptr_func( isInteresting ) ) );

    ptr_fun做的唯一的事情是使一些 typedef 有效,not1 需要这些 typedef,可以把 not1 应用于 ptr_fun,但不能直接对 isInteresting 应用 not1。因为是低级指针, isInteresting 缺乏 not1 需要的 typedef。

    not1不是STL中唯一有那些要求的组件。四个标准函数适配器(not1、not2、bind1st 和 bind2nd)都需要存在某些 typedef ,一些其他人写的非标准STL兼容的适配器(比如 Boost)也需要。提供这些必要的 typedef 的函数对象成为可适配的

    问题中的 typedef 是 argument_type、first_argument_type、second_argument_type 和 result_type

    STL 函数对象模仿了 C++ 函数,而一个 C++ 函数只有一套参数类型和一个返回类型。结果,STL暗中假设每个仿函数类只有一个 operator() 函数,而且这个函数的参数和返回类型要被传给 unary_function 或 binary_function。

      

  • 相关阅读:
    moment.js获取当前日期是当年的第几周
    angulajs中引用chart.js做报表,修改线条样式
    moment算本月开始日期和结束日期
    TFS(Team Foundation Server)敏捷使用教程(四):工作项跟踪(1)
    个人微信收款回调通知
    Winform,Wpf快捷键
    RemindMe
    数组循环左移p位
    RemindMe 说明
    双网卡同时上内外网
  • 原文地址:https://www.cnblogs.com/kidycharon/p/10044582.html
Copyright © 2011-2022 走看看