博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective_STL 学习笔记(四十) 使仿函数类可适配
阅读量:6528 次
发布时间:2019-06-24

本文共 1216 字,大约阅读时间需要 4 分钟。

 

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

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

找到第一个有趣的 Widget :

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

找到第一个不有趣的 Widget:

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

 

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

1   list
::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。

 

 

 

  

 

转载于:https://www.cnblogs.com/kidycharon/p/10044582.html

你可能感兴趣的文章
《R语言编程艺术》——1.4 R语言中一些重要的数据结构
查看>>
如何让你的手机比别人最先升级到 Android L
查看>>
Mozilla 开源支持计划:首批捐助 7 开源项目 50 万美元
查看>>
《Photoshop混合模式深度剖析》目录—导读
查看>>
《为iPad而设计:打造畅销App》——抓住iPad的核心用法
查看>>
华尔街宫斗戏升温:银行巨头和纽交所争夺交易数据所有权
查看>>
《精通自动化测试框架设计》—第2章 2.6节使用数据库
查看>>
《网站性能监测与优化》一2.4 软件服务应用网站
查看>>
《HTML5 开发实例大全》——1.26 使用鼠标光标拖动网页中的文字
查看>>
3144: [Hnoi2013]切糕
查看>>
异构数据库
查看>>
iOS.ObjC.Basic-Knowledge
查看>>
iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
查看>>
透视校正插值
查看>>
【转载】WinCE6.0 Camera驱动源码分析(二)
查看>>
Cobertura代码覆盖率测试
查看>>
【selenium学习笔记一】python + selenium定位页面元素的办法。
查看>>
Linux禁止ping
查看>>
【Matplotlib】 标注一些点
查看>>
[AX]乐观并发控制Optimistic Concurrency Control
查看>>