首页 理论教育 typename关键字的作用和使用详解

typename关键字的作用和使用详解

时间:2023-10-25 理论教育 版权反馈
【摘要】:由此可知,typename关键字主要用于解决由类模板机制带来的语义歧义,使模板声明更加直观。图1-15 例1-29的执行效果总结本小节先讲述了模板参数的概念和意义;之后详细讲述了typename关键字的使用以及它与class的关系。

typename关键字的作用和使用详解

前面几节的知识讲解已经涉及了模板的参数。本小节将详细地对模板参数进行阐述。模板参数可以是类型参数,也可以是常规类型参数,并且一个模板可以有多个参数。

如果是类型参数,类型参数可以采用typename或class关键字指明。

978-7-111-51399-5-Chapter01-109.jpg

如果是常规类型参数,即采用通常的参数定义。

978-7-111-51399-5-Chapter01-110.jpg

对于上述代码,实例化时可采用如下形式:

Queue<int,100>iq;

如果在声明类模板时,已经明确了模板参数:

978-7-111-51399-5-Chapter01-111.jpg

则实例化时可采用以下几种形式:

978-7-111-51399-5-Chapter01-112.jpg

整数参数可以用来提供大小或界限。

1.typename关键字的使用

typename关键字告诉编译器,其后的名称为一个类型,并可以用其来创建实例。例如,

978-7-111-51399-5-Chapter01-113.jpg

在上述代码中,如果没有typename关键字,编译程序则无法理解T::A是什么。

由此可知,typename关键字主要用于解决由类模板机制带来的语义歧义,使模板声明更加直观。

类模板及其成员函数使用tyepname关键字来限定所有对参数化类型的定义类型的引用。编译器一旦遇到typename关键字,就知道其后紧跟的是数据类型,并且在分析代码时假定类型的名字通过实例来填充。根据C++标准的要求,如果类型在模板化的类中定义,在模板中引用该类型时,都要使用typename限定符。下面举例说明typename的用法。

例1-28

978-7-111-51399-5-Chapter01-114.jpg(www.xing528.com)

例1-28的执行效果如图1-14所示。

978-7-111-51399-5-Chapter01-115.jpg

图1-14 例1-28的执行效果

总结

读者认真琢磨例1-28,体会其中的意思。

2.typename与class

在引入typename之前,class关键字早已在模板声明中被予以使用。C++标准委员会把typename关键字引入标准C++中,并用其替代class来声明参数化类型的模板中。例如,

978-7-111-51399-5-Chapter01-116.jpg

在引入typename关键字之后,标准C++允许在模板声明中用typename关键字替代class,例如,

978-7-111-51399-5-Chapter01-117.jpg

例1-29

978-7-111-51399-5-Chapter01-118.jpg

978-7-111-51399-5-Chapter01-119.jpg

例1-29的执行效果如图1-15所示。

978-7-111-51399-5-Chapter01-120.jpg

图1-15 例1-29的执行效果

总结

本小节先讲述了模板参数的概念和意义;之后详细讲述了typename关键字的使用以及它与class的关系。读者应重点学习本节内容。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈