C++3笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++3笔记相关的知识,希望对你有一定的参考价值。

 

1 函数包装器管理内联函数

2 函数包装器管理外部函数

3 函数模板数据类型覆盖

 

1 函数包装器管理内联函数

 

函数包装器

1设计执行接口,接口设计关卡(收保护费,插入if..else实现),计数器

2通知函数包装器依赖于函数模板,实现通用泛型

3函数代码可以内嵌在另外一个函数

4函数包装器,用于管理内嵌函数,外部函数调用

 

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

 

2 函数包装器管理外部函数

 

 1 #include <iostream>
 2 #include <functional>
 3 using namespace std;
 4 
 5 //函数包装器
 6 //1设计执行接口,接口设计关卡(收保护费,插入if..else实现),计数器
 7 //2通知函数包装器依赖于函数模板,实现通用泛型
 8 //3函数代码可以内嵌在另外一个函数
 9 //4函数包装器,用于管理内嵌函数,外部函数调用
10 
11 //函数包装器,T是数据类型,F是函数
12 template <typename T, typename F>
13 T run(T v1, T v2, F f)
14 {
15     return f(v1, v2);//函数传入参数
16 }
17 
18 int cheng(int a, int b)//外部函数
19 {
20     return a*b;
21 }
22 
23 void main()
24 {
25     int num1 = 29;
26     int num2 = 19;
27 
28     //函数包装器
29     //第1个int是返回值类型,第2个、第3个int是参数类型
30     function<int(int, int)> fun = cheng;
31     //函数包装器
32 
33     cout << run(num1, num2, fun) << endl;//551
34 
35     system("pause");
36 }

 

3 函数模板数据类型覆盖

 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 template <typename T>
 5 void swap1(T &a, T &b)
 6 {
 7     cout << "通用函数模板" << endl;
 8     T temp = a;
 9     a = b;
10     b = temp;
11 }
12 
13 void main()
14 {
15     int num1 = 100;
16     int num2 = 10;
17     char ch1 = Z;
18     char ch2 = A;
19 
20     cout << num1 << " " << num2 << endl;
21     cout << ch1 << " " << ch2 << endl;
22 
23     swap1(num1, num2);
24     swap1(ch1, ch2);
25 
26     cout << num1 << " " << num2 << endl;
27     cout << ch1 << " " << ch2 << endl;
28 
29     system("pause");
30 }

 

结构体可以直接赋值

所有成员都是public的类型可以赋值,比如class

 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class info
 5 {
 6 public:
 7     char name[40];
 8     double db;
 9     int data;
10 };
11 
12 template <typename T>
13 void swap1(T &a, T &b)
14 {
15     cout << "通用函数模板" << endl;
16     T temp = a;
17     a = b;
18     b = temp;
19 }
20 
21 void main()
22 {
23     info info1 = { "abcdefg",30.9,10 };
24     info info2 = { "hijklmn",9.1,1 };
25 
26     cout << info1.name << " " << info1.db << " " << info1.data << endl;
27     cout << info2.name << " " << info2.db << " " << info2.data << endl;
28 
29     swap1(info1, info2);
30 
31     cout << info1.name << " " << info1.db << " " << info1.data << endl;
32     cout << info2.name << " " << info2.db << " " << info2.data << endl;
33 
34     system("pause");
35 }

 

函数模板实现通用,可以根据自由数据类型进行优化 

函数模板的覆盖

 

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class info
 5 {
 6 public:
 7     char name[40];
 8     double db;
 9     int data;
10 };
11 
12 template <typename T>
13 void swap1(T &a, T &b)
14 {
15     cout << "通用函数模板" << endl;
16     T temp = a;
17     a = b;
18     b = temp;
19 }
20 
21 template <>
22 void swap1(info &info1, info &info2)//通用模板可以实现通用,针对自己的数据类型做出优化
23 {
24     cout << "特有函数模板" << endl;
25     info temp = info1;
26     info1 = info2;
27     info2 = info1;
28 }
29 
30 void main()
31 {
32     info info1 = { "abcdefg",30.9,10 };
33     info info2 = { "hijklmn",9.1,1 };
34 
35     cout << info1.name << " " << info1.db << " " << info1.data << endl;
36     cout << info2.name << " " << info2.db << " " << info2.data << endl;
37 
38     swap1(info1, info2);
39 
40     cout << info1.name << " " << info1.db << " " << info1.data << endl;
41     cout << info2.name << " " << info2.db << " " << info2.data << endl;
42 
43     system("pause");
44 }

 

 

 

 

 

123

以上是关于C++3笔记的主要内容,如果未能解决你的问题,请参考以下文章

C/C++编程笔记:C++中的函数重载和浮动

Xcode 4.6 的备份代码片段

1 代码片段1

C语言必会面试题(3耶稣有13个门徒,当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个開始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,...)(代码片段

C#学习笔记——需要注意的基础知识

C 中的共享内存代码片段