一、function template:
template
void swap (T& x, T& y)
void foo(void)
foo
foo
在swap中可以使用T来代替数据类型,在实际使用的时候T可以是任意数据类型
T可以用来做参数的类型,也可以做返回值类型,也可以用来做变量的声明
template是一个declaration
编译时不对template做任何操作,只是记录
在运行时,在调用函数出使用template创造一个新的函数
使用template中没有类型转换。如果函数中涉及template的地方需要进行自动类型转换会报error
函数重载overload规则:
1.检查唯一函数匹配
2.检查唯一函数模板匹配
二、class template
template
class vector{.....}
vector
vector
类的成员函数,每一个函数都是函数模板(function template)
都要写成如下格式:
template
vector
template function
template class
----------------------------------------------------------------------------------------------------------
template会导致编译时多遍扫描
template中可以有多个参数
template
注意template的尖括号,前后加空格以防与其他符号相连形成其他符号(如>>)
在实际应用中尖括号的里的内容可能会相当复杂
Vector< int (*)(Vector
------------------------------------------------------------------------------------------------------------
template的参数列表除了可以包含类,还可以包含常数表达式
template
class FixedVector{......};
---------------------------------------------------------------------------------------------------------
FixedVector
FixedVector
FixedVector
---------------------------------------------------------------------------------------------------------
文件中声明了一个class template
在实际应用中可能在多个cpp文件中生成相同的class of sometype(而且会同名)
在链接时会出现问题:调用时不知道应该链接哪一个
解决方法:
1.在名字前加上文件的前缀
下一篇:贾玲被传绯闻,这样的玩笑可开不得