一。函数模板
1. 格式 原理
template<typename T1, typename T2, ......, typename Tn>
返回类型 函数名 (参数列表)
{ }
typename是用来定义模板参数的关键字,也可以使用 class,不能使用 struct。
模板参数作用范围:紧跟的 { }
template<typename T> // 模板参数 -- 类型 void Swap(T& left, T& right) { T temp = left; left = right; right = temp; }
template<typename T1, typename T2> T1 Func (const T1& x, const T2& y) { cout << x << " " << y << endl; return x; }
使用函数重载太麻烦。模具填充不同类型,生成具体类型的代码。
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。
2. 函数模板的实例化
隐式实例化:让编译器根据实参推演模板参数的实际类型。
显示实例化:在函数名后的<>中指定模板参数的实际类型。
template<typename T> T Add(const T& left, const T& right) { return left + right; }
template<typename T> T* Alloc(int n) { return new T[n]; }
int main() {
int a1 = 10, a2 = 20;
double d1 = , d2 = ;
cout << (a1, a2) << endl;
cout << (d1, d2) << endl;
cout << (a1, ()d1) << endl;
cout << (()a1, d1) << endl;
cout << <>(a1, d1) << endl;
cout << <>(a1, d1) << endl;
* p1 = <>();
;
}


