函数包装器

 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)    收藏  举报

导航