C++中可调用对象与function

2018-01-26 10:31:11来源:网络收集作者:管理员人点击

分享

[var1]

可调用对象的定义:对于一个对象或者一个表达式,如果可以对其使用调用运算符,则称它为可调用的。


我们可以向一个算法传递任何类别的可调用对象。


总结一下C++中的可调用对象:


函数、函数指针、lambda表达式、bind创建的对象以及重载了函数调用运算符的类


注意:lambda有它自己唯一的类类型,只不过是未命名的。

然而,不同类型的可调用对象可能共享同一种调用形式。调用形式就是指明了调用返回的类型以及传递给调用的实参类型。一种调用形式也就是一种函数类型


eg: int(int,int)  //这是一个函数类型,接受两个int、返回一个int

标准库function类型


此类型定义在头文件functional头文件中,function是一个模板。eg:function f,f是一个用来存储可调用对象的空function。

利用function和容器map可以实现简单的计算器


#include
#include
#include
#include "functional"
using namespace std;
int add(int i, int j)
{
return i + j;
}
auto mod = [](int i, int j) {return i%j; };
struct divide
{
int operator()(int denominator, int divisor)
{
return denominator / divisor;
}
};
int main()
{
map> binops = { //下面的5个都属于可调用对象
{"+",add},//函数名代表函数指针
{"-",minus()},//标准库函数对象
{"*",[](int i,int j) {return i*j; }},//未命名的lambda对象
{"%",mod},//命名的lambda对象
{"/",divide()}//自定义的函数对象
};
cout << binops["+"](10, 5)<< endl;
cout << binops["-"](10, 5) << endl;
cout << binops["*"](10, 5) << endl;
cout << binops["/"](10, 5) << endl;
cout << binops["%"](10, 5) << endl;
system("pause");
return 0;
}

C++中可调用对象与function

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台