这篇笔记记录function模板与含有相同调用形式的可调用对象。
c++中有一些可调用对象
- 函数
- 函数指针
- lambda
- bind创建的对象
- 重载了函数调用运算符的类
比如下面三个函数add, mod, divide
1 |
|
三个不同可调用对象:普通函数add
,命名了的lambda
对象mod
,函数对象(function object
)divide
拥有相同的调用形式(call signature
).
1 | int (int, int) //表示传入两个int型,返回一个int型 |
而模板类function
使用时需要指定类型,如上述调用形式。如此可以定义多个function
对象
1 | int main(int argc, char** argv){ |
接下来, 可以构建从算数符号到函数的映射,如
1 | //加入main中 |
如同vector<int>
可以作为容器内容的类型,此处只不过用function<int(int,int)>
作为了map的val类型。
结束
c++可调用对象