前面几节的知识讲解已经涉及了模板的参数。本小节将详细地对模板参数进行阐述。模板参数可以是类型参数,也可以是常规类型参数,并且一个模板可以有多个参数。
如果是类型参数,类型参数可以采用typename或class关键字指明。
如果是常规类型参数,即采用通常的参数定义。
对于上述代码,实例化时可采用如下形式:
Queue<int,100>iq;
如果在声明类模板时,已经明确了模板参数:
则实例化时可采用以下几种形式:
整数参数可以用来提供大小或界限。
1.typename关键字的使用
typename关键字告诉编译器,其后的名称为一个类型,并可以用其来创建实例。例如,
在上述代码中,如果没有typename关键字,编译程序则无法理解T::A是什么。
由此可知,typename关键字主要用于解决由类模板机制带来的语义歧义,使模板声明更加直观。
类模板及其成员函数使用tyepname关键字来限定所有对参数化类型的定义类型的引用。编译器一旦遇到typename关键字,就知道其后紧跟的是数据类型,并且在分析代码时假定类型的名字通过实例来填充。根据C++标准的要求,如果类型在模板化的类中定义,在模板中引用该类型时,都要使用typename限定符。下面举例说明typename的用法。
例1-28
(www.xing528.com)
例1-28的执行效果如图1-14所示。
图1-14 例1-28的执行效果
总结
请读者认真琢磨例1-28,体会其中的意思。
2.typename与class
在引入typename之前,class关键字早已在模板声明中被予以使用。C++标准委员会把typename关键字引入标准C++中,并用其替代class来声明参数化类型的模板中。例如,
在引入typename关键字之后,标准C++允许在模板声明中用typename关键字替代class,例如,
例1-29
例1-29的执行效果如图1-15所示。
图1-15 例1-29的执行效果
总结
本小节先讲述了模板参数的概念和意义;之后详细讲述了typename关键字的使用以及它与class的关系。读者应重点学习本节内容。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。