C++ 模板学习总结(二)基本概念、实例化和具体化

前提:

前面已经将此次要总结的内容基本列出来了,希望可以全面总结一下模板的内容,为大家进行一次模板知识扫盲,本次要阐述的内容为模板的基本概念,说明模板到底是什么,有什么用,以及什么叫模板的实例化和具体化(具体化也被称为特化)。要特别说明的是本次说明最高只限于C++11的内容,更新的标准我也没有学习过。

模板:

首先要明白到底什么是模板,在CppReference上的定义如下:

A template is a C++ entity that defines one of the following:

意为模板是定义了一族类或者是函数或者是别名(C++11)的实体,至于他们以嵌套类或成员函数的形式出现就已经是后话了,最重要的是模板对一族定义,那么也就是说每一个有相同模板生成的类或函数各自间毫无实质关系,唯一的关系就是被同一个模板来生成的,而模板本身并不能在程序运行中产生任何影响,举个实际的例子,模板就像我们要生产一个东西的模具一样,但模具本身和最终生产的东西并没有关系。

比如以下模板:
template<typename T>  
class TestTemp{};  
可能是最为简单的一个模板类了,那么当我们在使用它的时候我们必须对其指定一个具体的类型,让其产生一个真正可用的类方能使用,但是我们永远不能直接使用TestTemp来进行创建对象这样的具体工作。例如
TestTemp<int> a;  
TestTemp<char> b;  

我们使用int和char分别生成了两个具体的类TestTemp<int>和TestTemp<char>。这两个类都是由TestTemp这个模板生成出来的,但是两者之间毫无关系,既不是相同类型也没有任何继承关系。
在CppReference上有这样一句话:

A class template by itselfis not a type, or an object, or any other entity.

一个类模板自身并不是一个类型,或对象,或其他任何实体。换言之,必须通过其生成具体的类后才能使用,那么这个过程其实就是我们所谓的特化。

模板的特化:

很多人可能认为我说的特化是显示特化,但在此我要强调一下,这里的特化是泛指的,有些教材和书籍上所说的具体化实际上就是特化,原词为Specialization可能是各自翻译上的差异。
那么什么叫特化呢,实际上就是根据模板实参来生成相应的、具体的类或者函数。换句话说,当使用具体的模板实参来替换模板参数列表里面的每一个形参后生成的类或函数的代码,就是对应这个模板实参的特化。
比如上面的TestTemp<int>,那么此时就会使用int来替换类模板中的T,当替换后会生成一个针对于int这个模板实参的类定义,那么这个类定义便是TestTemp在int上的特化。

对于类模板而言,在使用的时候所有的模板参数都是必须要指定的,比如说你必须通过TestTemp<int>这样的方式明确指定出模板实参为int,但是函数模板就有些不同了,当调用是函数模板会根据传入的函数参数(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值