函数模板
泛型程序设计: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