函数模板

显式具体化(explicit specialization)

对于函数调用是有一个优先级:普通函数>显式具体化模板>普通模板
智育什么叫显式具体化,先看下面的代码

struct job
{
    char name[20];
    int number;
    double salary;
}
void swap(job &, job&);
template<> void swap<job>(job &, job&);//显示具体化模板
template<typename T> void swap(T&, T&);

至于为什么要使用显示具体化,就要看下面的实例了。


模板显式实例化和显式具体化

当我们自己写了一个模板之后,一般是编译器自己会帮我们实例化好具体的函数,通过你传进的参数类型来判断(这是隐式实例化(implicit instantiation))

template<typename T>
void func(T &a,T &b){...}
func(2,3);//编译器自动创建类型为int的函数

如果有的时候需要我们自己实例化,这就是显式实例化

int ra =9,r1=3;
template fun<int>(int &,int &);//使用的是上述模板中已经定义好的算法
//注意template后不接<>符号

而另一种就是显式具体化,声明方式是:

template<> func(int &a,int &b);
template<>func<int>(int &,int&);//两种方式等价,这种声明是说对于这种指定的
类型要使用专门的,不同于模板的用法

这种主要是用于用户自己定义的类或者结构体,模板中可能使用了运算符,而自定义的类和结构体没有这些运算符的使用方法,从而要重写一遍专门的算法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容