函数探幽 — 函数模板

函数模板是通用的函数描述,也就是说,他们使用泛型来来定义函数,其中泛型可以用具体的类型(如int或者double)替换

模板函数的声明

函数模板的定义

 

模板本身不创建任何函数,而只是告诉编译器如何定义函数。当需要交换int的函数时,编译器将按模板模式创建这样的函数,并用int代替AnyType

       class与typename这两个关键词是等价的,只不过在这里typename更加易于理解,但是在代码库中class用的更多

上下两个模板等价

 

 

如果需要多个将同一个算法用于不同类型的函数,请使用模板。

如果不考虑向后兼容的问题,并愿意键入较长的单词,则声明类型参数时,应使用关键字typename而不使用class

函数模板不会缩短可执行程序。

 

重载的模板

 

需要多个不同类型使用同一个算法的函数时,可使用模板

但并非所有类型都使用相同算法  所以有了重载模板定义

并非所有的模板参数都必须是模板参数类型。

 

 

模板也有很大的局限性

如函数定义部分有赋值操作   ,而数值类型变为了数组  a=b;(不能通过编译),

如函数定义部分有<,但数值类型(anytype)为结构,if(a>b)便无法比较

如函数定义了乘法,T c=a*b;但数据类型(T)为数组,指针或结构将出现error

显示具体化

 

posted @ 2018-11-07 15:05  弓川  阅读(166)  评论(0编辑  收藏  举报