概念部分:
函数模板:
函数模板
函数模板的作用域
函数模板的显式隐式实例化
特例化:
完全特例化
不完全特例化
重载
非模板函数
模板的作用域:
模板的作用域只在当前
函数模板的编译:
模板不编译,实例出来的函数代码要进行编译
函数模板类型自推:
能够根据参数类型自动推演出模板类型参数
模板的实例化:
编译时期,根据模板调用的类型方式,自动生成一份对应于该类型的代码
eg:
template<typename T>
bool compare(const T a, const T b)
{
return a > b;
}
函数模板的隐式实例化:
利用模板函数自己实例化类型
eg:
void fun
{
compare<int>(10,20);
compare(10.2, 22.1);
}
函数模板的显示实例化:
直接给出类型
eg:
template bool compare<int>(int a, int b);
template bool compare<double>(double a, double b);
函数模板的特例化:
对特殊情况下的操作
eg:
template<>//尖括号里面不写任何东西
bool compare<const char*>(const char* a, const char* b)
{
return strcmp(a, b);
}
define 和 typedef的区别:
eg:
#define char* charptr;
typedef char* charptr;
const charptr
define:不进行类型检查,只进行字符替换 这里的const chatptr等同于 const char * ,const修饰的是c