C++泛型编程

模版

  • C++另一种编程思想称为 ==泛型编程== ,主要利用的技术就是模板
  • C++提供两种模板机制:函数模板类模板

模版的概念

模板就是建立通用的模具,大大提高复用性

  • 模板的目的是为了提高复用性,将类型参数化

模板的特点:

  • 模板不可以直接使用,它只是一个框架
  • 模板的通用并不是万能的

函数模版

函数模版的使用:

函数模板作用:

建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表

语法:

1
2
template<typename/class T>
函数声明或定义

解释:

template :声明一个创造模版

typename/class:表示后面的符号是一种数据类型,没有指定类型

T:通用的数据类型,字母可以替换,一般为大写

使用函数模板有两种方式:

  • 自动类型推导 XX();
  • 显示指定类型 XX<?>();

注意事项:

  • 自动类型推导,必须推导出一致的数据类型T,才可以使用
  • 模板必须要确定出T的数据类型,才可以使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include<iostream>
using namespace std;

//模版分为
//1.函数模板
//2.类模版

//定义一个函数模版

//语法: template <typename/class T>
// 函数

int a = 10;
int b = 20;
double c = 1.2;
double d = 2.2;

template <typename T>
void m1(T &a,T &b)
{
T xx = a;
a = b;
b = xx;
}
//使用方法
//1.自动类型推导
//2.显示指定类型

//注意:
//1.自动类型推导必须推导出一致的T,才能使用
//2.模板必须确定T才能使用

template <typename T>
void s1()
{
cout << "11111" << endl;
}

int main()
{
//1.自动类型推导
m1(a, b);

//2.显示指定类型
m1<double>(c, d);

//m1(a,c)错误! 自动类型推导必须推导出一致的T,才能使用

// s1()错误!模板必须确定T才能使用
s1<int>();


system("pause");
return 0;

}

函数模版和普通函数的区别: