欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++模板学习之泛型编程简介

程序员文章站 2022-05-26 20:48:17
c++中的泛型 函数模板 函数模板的语法规则 函数模板的使用方式 泛型指的是泛指的数据类型。也就是没有特定的类型,也不依赖于具体的数据类型。通常,我们编写函数的返回值,函数参数都需要依赖于具体的数据...

c++中的泛型 函数模板 函数模板的语法规则 函数模板的使用方式

泛型指的是泛指的数据类型。也就是没有特定的类型,也不依赖于具体的数据类型。通常,我们编写函数的返回值,函数参数都需要依赖于具体的数据类型。如果不同类型参数实现相同功能的函数,我们就需要对函数进行重载,重新编写。

但是使用泛型编程,我们就不需要依赖于具体的数据类型了。而在c++中,泛型编程依赖于模板技术。

问题:c++中有什么方法解决依赖类型的方法?

示例代码:宏定义的方式实现泛型编程

#include 
#include 

using namespace std;

#define swap(t, a, b) \
do  \
{\
 t c = a; \
 a = b;\
 b = c;\
}while(0)

int main()
{
 int a = 5, b = 3;
 swap(int, a, b);
 cout << "a = " << a << endl;
 cout << "b = " << b << endl;

 string s1 = "delphi";
 string s2 = "shaw";
 swap(string, s1, s2);

 cout << "s1 = " << s1 << endl;
 cout << "s2 = " << s2 << endl;

 return 0;
}

分析:

优点:代码复用,适合所有的类型

缺点:编译器不知道宏的存在,缺少类型检查

问题:有什么更好的方法解决类型检查的问题吗?

c++中的泛型编程

函数模板

一种特殊的函数可用不同类型进行调用 看起来和普通函数很相似,区别是类型可被参数化

函数模板的语法规则

template关键字用于声明开始进行泛型编程 typename关键字用于声明泛型类型。

函数模板的使用方式

1. 自动类型推导调用

不指定特定类型,让编译器根据我们传入参数来推导出我们所使用的类型。能够根据实参对参数类型进行推导

2. 具体类型显式调用

显式指定参数类型,如:function()

函数模板是泛型编程在c++中应用方式之一 函数模板是c++中重要的代码复用方式

示例代码:函数模板使用

#include 
#include 

using namespace std;

template < typename t >
void swap(t& a, t& b)
{
 t c = a;
 a = b;
 b = c;
}

int main()
{
 int a = 5, b = 3;
 swap(a, b);
 cout << "a = " << a << endl;
 cout << "b = " << b << endl;

 string s1 = "shaw";
 string s2 = "ousr";
 swap(s1, s2);
 cout << "s1 = " << s1 << endl;
 cout << "s2 = " << s2 << endl;

 return 0;
}

输出结果:

a = 3

b = 5

s1 = ousr

s2 = shaw