C++——模板

本文详细介绍了C++中的模板机制,包括函数模板和类模板的基本概念、特化以及应用实例。通过模板可以实现代码的类型参数化,达到重用的目的。文章还讨论了模板函数的特化、成员模板函数以及模板类如Queue和Stack的使用。另外,文章提到了智能指针`auto_ptr`,阐述了其在资源管理中的作用和基本操作。
摘要由CSDN通过智能技术生成

C++模板
模板定义:模板是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。

模板分类:函数模板和类模板。
函数模板针对参数类型不同的函数;类模板仅针对数据成员和成员函数类型不同的类。

使用模板目的:让程序员编写与类型无关的代码。

注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,如不能在main函数中声明或定义一个模板。
一、模板函数
1.一般模板函数
形式:template < typename T>(通用函数定义)或者template < class T>

 template <class 形参名,class 形参名,......> 
 返回类型 函数名(参数列表)
   {
   
      函数体
   }

其中template和class是关键字,class可以用typename 关键字代替,在这里typename 和class没区别,<>括号中的参数叫模板形参,模板形参和函数形参很相像,模板形参不能为空。
2.特化模板函数
函数模板的特化:当函数模板需要对某些类型进行特别处理,称为函数模板的特化。

//泛型版本
template <class T> int compare(const T &v1, const T &v2)
{
   
 if(v1 < v2) return -1;
 if(v2 > v1) return 1;
 return 0;
}

对于该函数模板,当实参为两个char指针时,比较的是指针的大小,而不是指针指向内容的大小,此时就需要为该函数模板定义一个特化版本,即特殊处理的版本:

//为实参类型 const char * 提供特化版本
template <> int compare<const char *>(const char * const &v1, const char * const &v2)
{
   
 return strcmp(v1, v2);
}

a: template <> //空模板形参表
b: compare<const char *> //模板名字后指定特化时的模板形参即const char *类型,就是说在以实参类型 const char * 调用函数时,将产生该模板的特化版本,而不是泛型版本,也可以为其他指针类型定义特化版本如int *.

//特化版本 (int *)
template <> int compare<const int *>(const int * const &v1, const int * const 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值