編程第七十二、七十三天

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 }

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