Lession 27 函数模板

来源:互联网 发布:上海携创软件 编辑:程序博客网 时间:2024/06/14 10:24

模板: 把类型作为参数传递进去的;

template<模板形参表>

返回值类型     函数模板名 (函数形参)

{


}


template <typename T>    // 函数模板:是模板的定义,定义中用的是通用的一类函数

T max(T& a, T& b)

{

}


max<int><3,4>    // 模板函数:是实实在在的函数定义       编译的时候就确定

有时可以省略类型形参: max(3,4);


模板 -> 函数    : 实例化

如果出现传递两次整形的情况,实例化函数只生成一个;


模板参数没有隐式类型转换!严格遵循类型的定义

模板参数(class T)对应的参数,不能有默认值;


模板形参可以包含非类型的值,这个是常量

template <class T, int size>    // 非类型参数 

T* alloc()

{

return new T[size] ;

}


max(3, 3.4);  // 错误,类型存在分歧


可以声明为inline

template <class T, int size>    // 非类型参数 

inline T* alloc()

{

return new T[size] ;

}


和普通函数一样,也可以重载;   // 本质还是函数的重载(即相应模板实例化出来的模板函数)


函数调用时会有:

1. 精确匹配

2. 类型提升

3. 类型转换  // int -> double

4. 类类型转换  // 子类->基类


模板函数匹配:

1. 精确匹配

2.寻找函数模板,寻找能精确匹配在函数

3. 类型转换










0 0