模板---函数模板

来源:互联网 发布:r语言与数据挖掘 pdf 编辑:程序博客网 时间:2024/04/26 06:54

模板为函数提供一个通用代码,写一次,可以为不同类型的数据提供函数功能,减少了程序员的工作量。
函数模板在声明时将类型设为参数,在函数的声明和定义中运用这形参,最后在实际调用时确定是int、double、char还是自定义类型。
(1)函数模板的声明格式:

template<class T1, class T2>T1 func(T1 a, T2 b)

(2)函数模板的调用
实际调用函数模板时,可能没有确定模板形参的具体类型,但编译器能根据函数实参的类型推断出模板形参的值,称为隐性调用。但如果模板的形参中带有数据,则调用时必须确定实参的类型和数据。代码如下:

template<class T1, class  T2>T2  func(T1 a, T2 b){     return a+b; } func('a',2);     //隐性调用 func<int,double>(44.42); //显性调用template<class T1,class T2, int ZZZ> //带数据的模板T1 func(T1 a, T2 b){  return a+b+ZZZ;}func<double,int,4>(1.11,2); //必须显性调用

(3)模板具体化u
有时候会因为内存空间的不当操作导致模板函数终止,此时需要对模板函数具体化,也就是在模板函数调用时为了避免内存不良操作而量身打造一个函数。格式如下:

template<class T1>void swap(T1 a,T1 b){  T1 tmp=a;   a=b;  b=a;   }//Myclass内有为指针赋予内存的操作,Myclass one("one");Myclass three("three");//one和three的内存空间大小不一样,不能直接交换//需要对函数模板进行具体定义template<>void swap(Myclass a, Myclass b){   内存处理并交换内存值}

(4)模板函数重载
函数重载在代码中的表示就是:函数名或形参列表有不同。在模板函数中,需要避免出现“二义性“。

模板函数的优先级从高到低是:重载—->显性调用—->隐性调用。

0 0
原创粉丝点击