函数模板
泛型程序设计:Generic Programming
算法实现时不指定具体要操作的数据类型
泛型--算法实现一边->适用于多种数据结构
优势:减少重复代码的编写
大量编写模板,使用模板的程序设计:函数模板,类模板
交换两个变量值的函数模板:
template <class T> void Swap(T&x, T&y) { T tmp = x; x = y; y = tmp; } int main() { int n = 1, m = 2; Swap(n, m); double f = 1.2, g = 2.3; Swap(f, g); return 0; }
函数模板中可以有不止一个类型参数
template <class T1,class T2> T2 print(T1 arg1, T2 arg2) { cout << arg1 << " " << arg2 << endl; return arg2; }
函数模板可以重载,只要它们的形参表不用即可:
template <class T1,class T2> void print(T1 arg1, T2 arg2) { cout << arg1 << " " << arg2 << endl; } template<class T> void print(T arg1, T arg2) { cout << arg1 << " " << arg2 << endl; }
C++编译器遵循一下优先顺序:
- 先找参数完全匹配的普通函数(非由模板实例化而得的函数)
- 再找参数完全匹配的模板函数
- 再找实参经过自动类型转换后能够匹配的普通函数
- 上面的都找不到,则报错
template <class T> T Max(T a, T b) { cout << "Template Max 1" << endl ; return 0; } template <class T, class T2> T Max(T a, T2 b) { cout << "Template Max 2" << endl ; return 0; } double Max(double a, double b) { cout << "MyMax" << endl; return 0; } int main() { int i = 4, j = 5; Max(1.2, 3.4); //调用Max(double, double)函数 Max(i, j); //调用第一个T Max(T a, T b)模板生成的函数 Max(1.2, 3); //调用第二个T Max(T a, T2 b)模板生成的函数 return 0; }
为了避免函数的二义性:可以在函数模板中使用多个类型参数,可以避免二义性
No comments:
Post a Comment