泛型编程是一种新的编程思想,基于模板技术有效的将算法和数据结构分离。泛型编程是指编写完全一般化并恶意重复使用的算法。就是指具有在多种数据类型上皆可操作,在c++上就是使用模板实现。
例如:我们要实现各个数据类型的最大值。需要写如下的函数重载。
int max(int a, int b)
{
return (a > b) ? a : b;
}
float max(float a, float b)
{
return (a > b) ? a : b;
}
double max(double a, double b)
{
return (a > b) ? a : b;
}
long max(long a, long b)
{
return (a > b) ? a : b;
}
使用基于c++中提供的泛型编程思想,模板的方法可以使用如下的方式替代。这里的class不代表对象的类,而是类型(可以使用typename替代)这样max函数的各个参数以及返回值的类型都为T,对于任意类型的两个数,我们都可以调用max求大小。
另外,T作为函数参数以及函数的返回值类型,他几乎可以是任意类型,也可以是类。当然这个类需要重载">"操作符。
如下示例:
#include "stdafx.h"
#include <iostream>
using namespace std;
#if 1
//template <class T>
template <typename T>//typename 也可以使用class代替
T max(T a, T b)
{
return (a > b) ? a : b;
}
#endif
int main()
{
cout << "max value:" << max(1, 2) << endl;
cout << "max value:" << max(1.1f, 2.6f) << endl;
cout << "max value:" << max(1.123l, 2.3456l) << endl;
cout << "max value:" << max('b', 'd') << endl;
cout << "max value:" << max<int>(3, 2.4) << endl;
return 0;
}
值得注意的是 max<int>(3, 2.4),由于参数中包含两种数据类型,编译器就不清楚到底该调用哪一种版本的max函数。编译的时候会报出如下的错误。所以需要 max<int>(3, 2.4)使用int指定类型为int。
代码的测试结果:
max value:2
max value:2.6
max value:2.3456
max value:d
max value:3
请按任意键继续. . .