- C++中的可调用对象:
- 函数
- 函数指针
- lambda表达式
- bind创建的对象
- 重载了函数调用运算符的类
- 每个可调用对象都有自己的类型:
- lambda有唯一的类类型(未命名的)
- 函数和函数指针的类型以及传递给调用的实参类型
- 每个可调用对象都有自己的调用形式
- 调用形式指明调用返回类型以及传递给调用的实参类型
- 两个不同的类型的可调用对象的调用形式可能相同
- 一种调用形式对应一个函数类型
标准库function类型
- 为了把同一调用形式的可调用对象看成具有相同的类型
- fuction定义在functional头文件中
- function为一个模板,创建一个具体对象时,需要提供额外信息,该信息表示function类型能够表示的对象的可调用形式
重载函数与function
- 不能直接将重载函数的名字存入function类型的对象中
- 重载函数间的差别在返回类型或者形式参数上
- 解决方法:
- 存储函数指针而非函数名字消除二义性
- 使用lambda消除二义性