C++数据结构模板进阶实例分析


本文小编为大家详细介绍“C++数据结构模板进阶实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++数据结构模板进阶实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。模板参数分类类型形参与非类型形参。类型模板形参:出现在模板参数列表中,跟在class或者typename后面的参数类型名称。非类型模板形参:用一个常量作为模板免费云主机域名的一个参数,必须是整形家族中的类型参数,否则不行。他在模板中可以当常量使用。实例:代码运行结果如下:看上面,我们定义了一个数组类,空间大小由N决定,类型是Array注意:非类型形参必须是整形家族中的类型,浮点数和类对象都不行。非类型的模板形参必须在编译期间就能确认结果。模板特化:在原模板类的基础上,针对特殊类型所进行的特殊化的实现。分为函数模板特化 和类模板特化。特化的步骤必须先有一个基础的函数模板关键字template后面接一对空的尖括号函数名后跟一对尖括号,里面指定需要的特化的类型函数形参列表:必须和函数模板的基础参数类型完全一致实例注意: 一般情况下如果函数模板遇到不能处理或者处理有误的类型,为了实现简单通常都是将该函数直接给出。类模板的特化分为全特化和偏特化。全特化: 对类模板参数列表的类型全部都确定(明确指定)偏特化: 堆类模板的参数列表中部分参数进行确定化分为部分特化和参数进一步限制部分特化参数进一步限制 如下有T*和T&,是模板的类型转为指针类型和引用类型实例 我们试着实例化几个对象,看他们用的是哪个模板代码运行结果:分离编译: 我们对这个应该是不陌生的,就是把函数的声明放在一个叫**.h的文件中,实现都放在一个叫.cpp**的文件中,这样方便我们管理。下面我们试着对模板进行分离编译:代码运行结果如下代码运行时发生了报错,说Add这个函数是没有见过的。得出结论:函数模板不能分离编译,普通函数可以。为什么会这样呢?C++程序运行一般经过几个阶段:预处理——>编译——>汇编——>链接(更详细的内容可以参考往期博客——程序的编译)模板在.cpp中定义了,由于不知道T的类型,所以没有对模板进行实例化。a.h 和 a.cpp 走的是两条不同的路,两条路都没有对模板进行实例化(因为不知道T的类型)。因为没有对模板进行实例化,所以没有函数参数,也就没有函数地址,所以在链接时,test.cpp中的调用Add函数时,没有函数地址,call调用不到Add函数,所以报错。解决方法:暴力:不分离编译,统一放在一个.h或.hpp的文件中模板定义位置显示实例化(不推荐,这样就失去了泛型的特点)读到这里,这篇“C++数据结构模板进阶实例分析”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: C++如何实现班车管理系统

这篇文章主要讲解了“C++如何实现班车管理系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++如何实现班车管理系统”吧!设计要求:一交通公司,班车系统的数据包括如下两部分:①班车信息:班交及车号、最大载客数…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 09/10 18:02
Next 09/10 18:02

相关推荐