std::function
()内写参数类型
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 }
demo
原文链接: https://www.cnblogs.com/Geek-xiyang/p/6696929.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/252406
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!