博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 类模板的使用
阅读量:7212 次
发布时间:2019-06-29

本文共 1234 字,大约阅读时间需要 4 分钟。

 从事C++挺久了,在前段时看书时,发现高手,都是在写模板无,泛型编程,顿感差距。自己连模板都没有写,于是就小小的研究了下模板的用法。

模板简而言之就是对某此对象的相同方法,或处理方式,进行归纳,总结,生成一个可以处理共同部份,适应多种不同对象的方法。在C语言时代就是宏定义方法。用#define定的一个方法,不过,C时代只是对函数方法的处理,还没有对象概念,这和后来的C++函数模板一样。

 1.类模板

   请参见

   http://www.cnblogs.com/waytofall/archive/2012/06/26/2563642.html

 

1.函数模板

1.模板函数为不同的模板实参定义了一个函数家族。它的表示看起来和普通的函数很相似,唯一的区别是有些函数元素是未确定的:这些参数将在使用的时候被参数化。

template 
inline T const& max(T const& a,T const& b){ return a
上述例子中的参数类型没有确定,用模板参数T来代替。
 

2.函数模板的实例化:使用具体的类型代替模板参数的过程。这个过程产生了一个模板的实例。这个过程是在编译的时候进行的。

模板内部的操作要被进行参数的类型所支持,否则会出错。

在编译的时候:

1)实例化前,先检查模板代码本身,查看语法错误等,如遗漏分号等;

2)在实例化期间,检查模板代码,查看是不是所有的调用都有效。如该实例化类型不支持某些函数的调用。

 

3.显示指定模板参数

模板参数不支持自动类型转换,每个T都必须准确的匹配。

template 
inline T const7 max(T const& a, T cosnt& b);...max(4,7) //OKmax(4,4.2) //ERROR,第一个是int,第二个是double
有几种解决办法,
1)max(static_cast(double)(4),4.2)   //OK
2)显示指定模板参数:
max
(4,4.2)
3)使用连个模板参数。
 

4.重载函数模板

和普通函数一样,模板函数同样可以被重载,相同的函数名称可以具有不同的函数定义。

几条基本的原则:

1)非模板函数和一个同名的模板函数可以同时存在。对于非模板函数和同名的函数模板,如果其他条件都相同的话,在调用的时候将调用非模板函数,不会实例化模板函数。

2)如果模板产生一个更好的匹配,选择模板参数。

3)可以显示的指定一个空的模板实例列表,告诉编译器,用模板来匹配。

4)函数的所有重载说明在该函数被调用位置之前。

我现在的感觉是这个功能少用,很容易出问题,以后就不知道了。

转载于:https://www.cnblogs.com/imystr/p/3912105.html

你可能感兴趣的文章
Lombok简介
查看>>
几款开源图像处理软件评测研究
查看>>
Fundebug是这样备份数据的
查看>>
HT for Web的HTML5树组件延迟加载技术实现
查看>>
apolloxlua include关键字
查看>>
Flutter教程app
查看>>
使用Hexo搭建专属Blog
查看>>
Swoole 2019 :化繁为简、破茧成蝶
查看>>
Android RTL 及小语种 适配
查看>>
走近webpack(1)--多入口及devServer的使用
查看>>
jquery-weui滚动加载问题解决
查看>>
SpringBoot整合Shiro使用Ehcache等缓存无效问题
查看>>
“产学合作勇创新·协同育人书新篇”贵州理工大数据学院数据科学训练营结题答辩报告会圆满举行...
查看>>
EDEN-MACE 1.4.0 更新,增加数据清理功能
查看>>
ASP.Net中实现上传过程中将文本文件转换成PDF的方法
查看>>
营收放缓、股价暴跌、高管离职,Facebook迎来至暗时刻?
查看>>
MySQL探秘(二):SQL语句执行过程详解
查看>>
使用Akka持久化——消息发送与接收
查看>>
Spring框架之Filter应用
查看>>
在IDEA中设置自己的名字和时间
查看>>