std::function<datatype()>
()内写参数类型
datatype 代表function的返回值
灵活的用法..
代码如下
1 #include <stdio.h> 2 #include <iostream> 3 #include <map> 4 #include <functional> 5 #include <stdlib.h> 6 using namespace std; 7 8 // 普通函数 9 int add(int i, int j) { return i + j; } 10 // lambda表达式 11 auto mod = [](int i, int j){return i % j; }; 12 // 函数对象类 13 struct divide 14 { 15 int operator() (int denominator, int divisor) 16 { 17 return denominator / divisor; 18 } 19 }; 20 21 ///SubMain// 22 int main(int argc, char *argv[]) 23 { 24 // 受限的map 25 map<char, int(*)(int, int)> binops_limit; 26 binops_limit.insert({ '+', add }); 27 binops_limit.insert({ '%', mod }); 28 // 错误 1 error C2664: “void std::_Tree<std::_Tmap_traits<_Kty,_Ty,_Pr,_Alloc,false>>::insert(std::initializer_list<std::pair<const _Kty,_Ty>>)”: 无法将参数 1 从“initializer-list”转换为“std::pair<const _Kty,_Ty> &&” 29 // binops_limit.insert({ '%', divide() }); 30 cout<<"limit: "<<binops_limit['+'](10, 5)<<endl; 31 cout<<"limit: "<<binops_limit['%'](10, 5)<<endl; 32 // 更灵活的map 33 map<char, function<int(int, int)>> binops = 34 { 35 { '+', add }, 36 { '-', minus<int>() }, 37 { '*', [](int i, int j){return i * j; } }, 38 { '/', divide() }, 39 { '%', mod }, 40 }; 41 cout << binops['+'](10, 5) << endl; 42 cout << binops['-'](10, 5) << endl; 43 cout << binops['*'](10, 5) << endl; 44 cout << binops['/'](10, 5) << endl; 45 cout << binops['%'](10, 5) << endl; 46 system("pause"); 47 return 0; 48 }