1.使用场合
C++语言有多种可调用对象:函数、函数指针、lambda
表达式、bind
创建的对象以及重载了函数调用符的类。这些可调用对象具有不同的类型,可能具有相同的调用形式,有时候我们希望把它们看做具有相同的类型。eg:
int add(int i, int j){
return i + j;
}
auto mod = [](int i, int j){ return i % j; };
上述add
和mod
属于不同的类型,但是具有相同的调用形式,int(int, int)
;如果我们希望构建一个简单的计算器,要使用map<string, classname>
,这个时候我们希望add
和mod
是同一种类型。
note:lambda
表达式、bind
创建的对象本质上是生成重载了函数调用符的类的对象。
2.function
的使用
function<int(int, int)> f1 = add;
function<int(int, int)> f2 = mod;
map<string, function<int(int, int)>> binops;
binops["+"] = f1;
binops["%"] = f2;
cout << binops["+"](1, 2) << endl;// 3
cout << binops["%"](1, 2) << endl;// 1