函数探幽 — 函数模板
函数模板是通用的函数描述,也就是说,他们使用泛型来来定义函数,其中泛型可以用具体的类型(如int或者double)替换
模板函数的声明
函数模板的定义
模板本身不创建任何函数,而只是告诉编译器如何定义函数。当需要交换int的函数时,编译器将按模板模式创建这样的函数,并用int代替AnyType
class与typename这两个关键词是等价的,只不过在这里typename更加易于理解,但是在代码库中class用的更多
上下两个模板等价
如果需要多个将同一个算法用于不同类型的函数,请使用模板。
如果不考虑向后兼容的问题,并愿意键入较长的单词,则声明类型参数时,应使用关键字typename而不使用class
函数模板不会缩短可执行程序。
重载的模板
需要多个不同类型使用同一个算法的函数时,可使用模板
但并非所有类型都使用相同算法 所以有了重载模板定义
并非所有的模板参数都必须是模板参数类型。
模板也有很大的局限性
如函数定义部分有赋值操作 ,而数值类型变为了数组 a=b;(不能通过编译),
如函数定义部分有<,但数值类型(anytype)为结构,if(a>b)便无法比较
如函数定义了乘法,T c=a*b;但数据类型(T)为数组,指针或结构将出现error
显示具体化