编程第七十二、七十三天

c++ functional头文件 std::用法

 1 #include <iostream>
 2 #include <functional>
 3 using namespace std;
 4 
 5 //函数包装器
 6 //第一,设计执行接口,接口可以设计关卡(收费,插入if...else)、计数器
 7 //第二,函数包装器依赖于函数模板,实现通用泛型
 8 //第三,函数代码可以内嵌在另外一个函数,实现函数怀孕
 9 //第四,函数包装器可以用于管理内嵌函数和外部函数调用
10 
11 //函数包装器,T是数据类型,F是函数
12 template <typename T, typename F>
13 T run(T v, F f)//第一个参数是数据,第二个参数是函数
14 {
15     static int count = 0;//计数器
16     count++;
17     std::cout << "一个参数的包装器 执行" << count << "" << std::endl;
18     if (count > 1)//通过计数器,限定函数执行次数
19     {
20         T vx(0);
21         return vx;
22     }
23 
24     return f(v);//函数传入参数
25 }
26 
27 template <typename T, typename F>
28 T run(T v1, T v2, F f)//第一个参数是数据,第二个参数是数据,第三个参数是函数
29 {
30     return f(v1, v2);//函数传入参数
31 }
32 
33 void main()
34 {
35     double db = 12.9;
36     int num1 = 19;
37     int num2 = 29;
38 
39     //    <返回值类型(参数类型)>
40     //fun1是函数指针
41     std::function <double(double)>fun1 = [](double u)
42     {
43         return u * 2;
44     };
45 
46     std::function <double(double)>fun2 = [](double u)
47     {
48         return u*u;
49     };
50 
51     //    <返回值类型(参数类型, 参数类型)>
52     std::function <int(int, int)>fun3 = [](int u1, int u2)
53     {
54         return u1 + u2;
55     };
56 
57     std::cout << run(db, fun1) << std::endl;//25.8
58 
59     std::cout << run(db, fun2) << std::endl;
60 
61     std::cout << run(num1, num2, fun3) << std::endl;//48
62 
63     system("pause");
64 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章