我相信很多没有经验的人对于如何分析C模板的显式具体化是无能为力的。为此,本文总结了问题产生的原因和解决方法,希望大家可以通过这篇文章来解决这个问题。
模板功能虽然很有用,但也存在一些问题。例如,有些操作并不适合所有类型。针对这种情况,C提供了一种解决方案,即为特定类型提供具体的模板定义。这里的具体性可以理解为类型的具体性。
我们来看一个C++ Primer当中的例子,假设现在我们有一个结构体叫做job:
structjob{
stringname
双倍工资;
intfloor
}可以作为一个整体赋给结构,所以前面的Swap函数同样适用于它。
templatetypenameT
空隙交换(Ta,Tb){ 0
ttemp=a;
a=b;
b=温度;
}但现在我们希望在交换结构时,只交换薪资和楼层字段,名称不变。因为我们要引入逻辑变化,所以直接调用Swap函数是不可行的。
当然我们可以不用函数模板,直接重载函数:
无效交换(joba,jobb){ 0
//swap是std的交换函数,在算法头文件中。
互换(a .薪水,b .薪水);
互换(a.floor,b . floor);
}因为C规定非函数模板的优先级高于函数模板,所以我们在作业结构上调用Swap函数时会优先考虑这一点。
除此之外,我们还可以提供一个具体化的模板函数:
templatevoitswapjob(joba,jobb){ 0
互换(a .薪水,b .薪水);
互换(a.floor,b . floor);
}这个函数的写法好像有点特别。我们在函数类型之前添加了模板,并在函数名称之后跟随作业。意味着这是一个功能模板的明确体现,也可以理解为为之前的功能模板提供了一个作业类型的版本。c规定显式模板函数比普通模板函数具有更高的优先级。
看完以上内容,你掌握了如何分析C模板的显式具体化了吗?如果您想学习更多技能或了解更多相关内容,请关注行业资讯频道,感谢您的阅读!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/151262.html