C++ Primer Chapter 14-3
来源:互联网 发布:mysql mac 安装包下载 编辑:程序博客网 时间:2024/06/05 04:30
1:函数对象常常作为泛型算法的实参(操作方法),就像 lambda 一样,可以重载泛型算法中的默认操作。自己重新定义一种操作。
2:lambda 其实是一个函数对象,编译器会把 lambda 翻译成一个未命名的函数类对象。其重载了函数调用运算符,且为一个 const 的函数。如果捕获列表中有数据的话,那么该类就会有对应个数的数据成员,也因此该类没有默认构造函数。有没有拷贝控制和析构函数要具体看捕获数据的类型。
3:标准库中定义了一组表示算术运算符、关系运算符、逻辑运算符的函数对象,他们都是模板类。可以定义一个对应类型的函数对象,然后用该对象去执行算术运算,关系运算等等。详见 page510,而且该函数对象的参数个数为运算符运算对象的个数。
4:标准库中的函数对象可以比较指针的大小。
5:关联容器中的元素都是利用标准库中 less 函数对象来排序的。
6:C++中的可调用对象有:函数,函数指针,函数对象(重载了调用运算符的类的对象),lambda 表达式,bind创建的对象。
7:不同的调用对象可能具有相同的调用形式,相同的调用形式是指:具有相同的返回类型和相同实参个数和类型。如 int(int, int)这种
8:函数表:用于存储指向这些调用对象的 “指针” ,函数表可以用 map 来实现。构建一个运算符的 string 关键字 到 对应的函数形式(这里是指针)表。比如:
map<string, int(*)(int, int)// 只能存储该类函数指针。
定义了一种 string 到调用形式为 int (*)(int, int) 的函数表。但是该同一个函数表中的调用类型必须相同。
9:为了解决以上函数表定义不可以存储具有相同的调用形式不同调用的类型的问题,标准库中定义了 function 模板类,可以存储具有相同的调用形式的所有调用类型。
10:function 是模板,那么就要指出类型,该类型代表的是调用形式,比如
function<int(int,int)> f;
// 表示定义一个可以存储调用形式为 int(int,int) 的所有调用对象
- // 在这里没有存储,是一个空的 function 对象
11:
function<int(int,int)> f = add;
function<int(int,int)> f1 = divide();
function<int(int,int)> f2 = [](int,int)->int{};
这里 f 就是一个函数指针, f1 是一个函数对象,f2 是一个 lambda 表达式。但是他们都具有相同的调用形式。
12:这样通过 以上分析就可以通过 funtion<int(int,int)> 这种类型来定义函数表。
map<string,function<int(int,int)>>
这样我们就可以定义函数调用形式相同的所有函数调用类型。其实就相当于我们抽象出来一个函数调用形式的类型,只要具有相同调用形式的类型都是同一种类型。function 屏蔽了底层的实现不同性。
0 0
- C++ Primer Chapter 14-3
- c primer plus Chapter 14 p383
- C++Primer-Function chapter
- C primer plus -- Chapter 2
- C++ Primer Chapter 3
- C++ Primer Chapter 14-1
- C++ Primer Chapter 14-2
- C++ Primer Chapter 14-4
- C++ Primer Chapter 14-5
- C++ Primer Chapter 7-3
- C++ Primer Chapter 9-3
- C++ Primer Chapter 10-3
- C++ Primer Chapter 11-3
- C++ Primer Chapter 12-3
- C++ Primer Chapter 13-3
- C++ Primer Chapter 15-3
- 《C primer plus》笔记--Chapter 1
- C++Primer Chapter One学习笔记
- 正则全部符号解释
- Java 相关[陆续更新]
- C++ Primer Chapter 14-2
- Map集合
- Machine Learning第五讲[神经网络: 学习] --(二)实践中的BP算法
- C++ Primer Chapter 14-3
- c++对象模型
- 字符串练习
- hadoop分布式集群搭建
- C++ Primer Chapter 14-4
- 加入链接
- C++ Primer Chapter 14-5
- 枚举
- 关于Win7系统安装XAMPP建站集成软件包80端口占用问题的解决方法