函数模板

作者: lusoer | 来源:发表于2017-02-21 23:11 被阅读19次

显式具体化(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&);//两种方式等价,这种声明是说对于这种指定的
类型要使用专门的,不同于模板的用法

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

相关文章

  • c++具体化和实例化的区别

    首先:区分 非模板函数 模板函数 具体化非模板函数就是没有template模板函...

  • GEEKBAND C++ STL与模板编程

    C++ 函数模板 函数模板的声明和模板函数的生成 1.函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多...

  • C++模板编程/泛型编程

    模板分类 模板分为函数模板与类模板两类。 函数模板 模板声明 模板定义 例如 函数模板实参类型不一致问题 参数推导...

  • Django自定义模板函数

    模板函数是使用于模板文件的处理函数,模板函数的使用方式是{% 模板函数 %} 1. 创建自定义函数文件夹 想要使用...

  • 14/12

    成员模板:模板类中成员变量是模板类对象(1),模板类中函数是模板函数(2)

  • 14/15

    约束模板友元 模板类的外边定义一个模板函数,在模板类中将模板函数具体化为模板类的友元函数 非约束模板友元 模板类中...

  • 第一章:函数模板

    函数模板是指被参数化的模板,可以代表一类函数。 1.1 初识函数模板 函数模板和普通函数看起来很相似,但是部分元素...

  • 2018-05-05

    CPP强弱类型 宽字符本地化 函数模板 函数重载: 根据参数来识别函数模板: 原生函数优先于模板函数 强行调用...

  • C++模板类模板成员函数的定义与使用

    1 模板类和模板函数 对于大多数人来说都知道如何定义模板类和模板函数,很少会触及模板类的成员函数还有自己的模板参数...

  • 函数模板,不是模板类,与函数重载的情况.以及函数模板的机制研究

    这里有:1.函数模板的基本调用2.当函数模板和函数重载在一起的时候,先调用普通函数还是函数模板2.函数模板在c++...

网友评论

    本文标题:函数模板

    本文链接:https://www.haomeiwen.com/subject/gtkpwttx.html