函数包装器
1 /* 函数包装器 */
2
3
4 // 函数包装器:
5 /*
6 第一,设计通用执行的接口,设计关卡,计数
7 第二,函数包装器依赖函数模板,实现通用泛型
8 第三,函数代码可以内嵌在另外一个函数,实现函数怀孕
9 */
10
11 #include<iostream>
12 #include<functional>
13
14 // 函数包装器 T是数据类型 F是一个函数
15 template <typename T,typename F>
16 T run(T v,F f)
17 {
18 static int count = 0;
19 count++;// 计数器
20 std::cout << "run 一个参数的包装器执行" << count << "次" << std::endl;
21 if (count > 1)// 限定函数执行次数
22 {
23 T vx(0);
24 return vx;
25 }
26 return f(v);// 函数传入参数
27 }
28
29
30
31 template <typename T,typename F>// 拓展
32 T run(T v1,T v2,F f)
33 {
34 return f(v1,v2);// 函数传入参数
35 }
36
37
38 void main()
39 {
40 using std::function// C++ 语法,如果有namespace就不需要std,专门引用一个关键字不需要std
41 using std::cout;
42 using std::endl;
43 using std::cin;
44 //using namespace std;
45 double db = 12.9;// double * 2
46
47 int num1 = 19;
48 int num2 = 29;
49
50 function<double(double)> fun1 = [](double u)
51 {
52 return u*2
53 };
54 // function: 一个通用的函数
55 // double: 返回值类型
56 // double: 函数的参数是double类型
57 // fun1: 自定义的函数名
58
59 function<double(double)> fun1 = [](double u)
60 {
61 return u * u;
62 };// 此处分号不能少
63
64 function<int(int,int)> fun3 = [](int u1,int u2)
65 {
66 return u1+u2;
67 };
68
69
70 cout << run(db,fun1) << endl;
71 cout << run(db,fun2) << endl;
72 cout << run(num1,num2,fun3) << endl;
73 cin.get();// 等价于输入一个字符getchar
74 }
长风破浪会有时,直挂云帆济沧海
posted on 2015-05-31 10:04 Dragon-wuxl 阅读(219) 评论(0) 收藏 举报
浙公网安备 33010602011771号