###《Effective STL》--Chapter6
点击查看Evernote原文。
#@author: gr
#@date: 2014-09-27
#@email: forgerui@gmail.com
Chapter6 函数子、函数子类、函数及其他
Topic 38: 遵循按值传递的原则来设计函数子类
函数作为参数传递的是函数指针,所以尽量使函数子是单态的,可以使用这个函数去调用其它多态函数实现多态。这样也可以保证函数子的小巧。
Topic 39: 确保判别式是“纯函数”
一个判别式是一个返回为bool类型的函数,包括判别子类和判别函数。纯函数所能访问的数据应该仅局限于参数的函数,不可修改状态。否则,在多次调用判别式时,可能改变状态而得到不同的结果。比如:在一个循环中多次调用一个判别式,可能得到不同的结果。
所以将函数声明为const形式:
class BadPredicate: public unary_function<Widget, bool>{
pulbic:
bool operator()(const Widget&)const{
//不允许修改状态
//...
return ...;
}
}
Topic 40: 若一个类是函数子,则应使它可配接
如果一个函数子类的operator()只有一个实参,那么它应该从std::unary_function继承;如果函数子类的operator()有两个实参,那么它应该从std::binary_function继承。返回类型是operator()的最后一个实参。
not1和bind2nd只能用于可配接的函数对象,如果函数子类不是从unary_function或binary_function继承而来,则无法配接。
template<typename T>
class MeetsThreashold: public std::unary_function<Widget, bool>{
private:
const T threshold;
public:
MeetsThreshold(const T& threshold);
bool operator() (const Widget&) const;
}
Topic 41: 理解ptr_fun、mem_fun和mem_fun_ref的来由
1. 使用STL算法可以调用函数,但无法使用类成员函数。mem_fun和mem_fun_ref被用来高速成员函数,使之可以像函数一样被接受。
for_each(vw.begin(), vw.end(), mem_fun(&Widget::test));
2. ptr_fun将函数传给STL组件时使用,可以不用,等编译器提醒时再加上。
for_each(vw.begin(), vw.end(), ptr_fun(test));
Topic 42: 确保less<T>与operator<具有相同的语义
less<T>默认调用operator<,如果修改less<T>,会使operator>和less<T>意义不一致。
当你需要另外一个less<T>版本实现时,尽量不要修改原less<T>,而是用其它名称进行命名,确保operator<与less<T>有相同的意义。
struct selfLess: public binary_function<Widget, Widget, bool>{
bool operator()(const Widget& lhs, const Widget& rhs) const{
return lhs.maxSpeed() < rhs.maxSpeed();
}
};
###《Effective STL》--Chapter6的更多相关文章
- 《Effective STL》学习笔记
http://www.cnblogs.com/arthurliu/archive/2011/08/07/2108386.html 作者:咆哮的马甲 出处:http://www.cnblogs.com/ ...
- ###《Effective STL》--Chapter3
点击查看Evernote原文. #@author: gr #@date: 2014-09-13 #@email: forgerui@gmail.com Chapter3 关联容器 Topic 22: ...
- ###《Effective STL》--Chapter5
点击查看Evernote原文. #@author: gr #@date: 2014-09-17 #@email: forgerui@gmail.com Chapter5 算法 Topic 30: 确保 ...
- ###《Effective STL》--Chapter7
点击查看Evernote原文. #@author: gr #@date: 2014-08-31 #@email: forgerui@gmail.com Chapter7 在程序中使用STL Topic ...
- ###《Effective STL》--Chapter1
点击查看Evernote原文. #@author: gr #@date: 2014-09-12 #@email: forgerui@gmail.com Chapter1 容器 Topic 4: 调用e ...
- ###《Effective STL》--Chapter2
点击查看Evernote原文. #@author: gr #@date: 2014-09-15 #@email: forgerui@gmail.com Chapter2 vector和string T ...
- ###《Effective STL》--Chapter4
点击查看Evernote原文. #@author: gr #@date: 2014-09-14 #@email: forgerui@gmail.com Chapter4 迭代器 Topic 26: i ...
- 容器使用的12条军规——《Effective+STL中文版》试读
容器使用的12条军规——<Effective+STL中文版>试读 还 记的自己早年在学校学习c++的时候,老师根本就没有讲STL,导致了自己后来跟人说 起会C++的时候总是被鄙视, ...
- 《Effective STL中文版》前言
<Effective STL中文版>前言 我第一次写关于STL(Standard Template Library,标准模板库)的介绍是在1995 年,当时我在More Effec ...
随机推荐
- Modbus调试利器 Modbus Poll
Modbus Poll是一个非常不错的工具,支持TCP/串口 下载地址:http://pan.baidu.com/share/link?shareid=2880213929&uk=248325 ...
- (4)ARP:地址解析协议
一.简介 ARP为IP地址到对应的硬件地址之间提供动态映射.之所以称为动态是因为这个过程是自动完成的.一般应用程序用户或系统管理员不必关心.RARP是被那些没有磁盘驱动器的系统使用,它需要系统管理员进 ...
- Servlet+Tomcat 界面登录
1.文件夹建立(必须按照这个规范,文件名和文件夹名必须一致) a.在%TOMCAT_HOME%\webapps下建立一个文件夹,取名MyWebsit b.在MyWebsit文件夹下新建WEB_INF文 ...
- git安装教程
msysgit是Windows版的Git,从https://git-for-windows.github.io下载(网速慢的同学请移步国内镜像),然后按默认选项安装即可. 安装完成后,在开始菜单里找到 ...
- 《Effect Java》 归纳总结
目录: 一.创建和销毁对象 (1 ~ 7) 二.对于所有对象都通用的方法 (8 ~ 12) 三.类和接口 (13 ~ 22) 四.泛型 (23 ~ 29) 五.枚举和注解 (30 ~ 37) 六.方法 ...
- function和感叹号,运算符号的转化
1.下面的程序经过运算之后,a为true,这个很好理解,但是函数怎么会运行呢? var a = !function(){ alert('message'); }(); console.log(a); ...
- 第一个struts案例及分析
软件中的框架,是一种半成品: 我们项目开发需要在框架的基础上进行!因为框架已经实现了一些功能,这样就可以提高开发效率! Struts2 = struts1 + xwork (struts是基于MV ...
- Android 调用系统的分享[完美实现同一时候分享图片和文字]
android 系统的分享功能 private void share(String content, Uri uri){ Intent shareIntent = new Intent(Intent. ...
- [Whole Web] [Node.js] [Browserify] [Grunt] Automation task with grunt-browserify & grunt-contrib-watch
What we want is when the server side Node.js files have been changed, we want to use browserify to b ...
- 列式存储 V.S. 行式存储
列式数据库 http://zh.wikipedia.org/wiki/%E5%88%97%E5%BC%8F%E6%95%B0%E6%8D%AE%E5%BA%93 列式存储与行式存储 http://my ...