C++泛型函数及模版类
什么是泛型编程?
简单来说,泛型编程,意思就是针对广泛类型的编程方式。具体类型可以有不同的实现方式,但是针对广泛类型编程,就能在需要调用时才指定参数类型或者调用类型。
泛型编程是一种基于发现高效算法的最抽象表示的编程方法。也就是说,以算法为起点并寻找能使其工作并且有效率的工作的最一般的必要条件集。
可以想象的是,很多算法都需要相同的必要条件集,并且这些必要条件集有不同的实现方式。STL标准模版库就是泛型编程的例子。
泛型函数怎么写?
#include<iostream> using namespace std; template<typename T> T * My_find(T *array,T n,T x){ T* p = array; int i; for(i=0;i<n;i++){ if(*p == x){ return p; } p++; } return 0; } int main(){ int a[] = {1,2,3,4,5,6,7,8,10}; int *result = My_find<int>(a,10,3); cout<<(*result)<<"\n"<<endl; return 0; }
上面这个例子是一个泛型函数的实现。
template<typename T>
这句话的意思是指设定一个泛型类型T。接下来就直接可以将T作为一个参数类型使用了。
int *result = My_find<int>(a,10,3);
这是泛型函数的调用方法。尖括号指定函数泛型的具体类型,然后传入参数。
模版类怎么写?
除了泛型函数,最重要的就是泛型类也就是模版类了。
#include<iostream> using namespace std; template<class T> class Operate{ public: static T add(T a,T b){ return a+b; } static T Mul(T a,T b){ return a*b; } static T Judge(T a,T b=1){ if(a>=0) return a; else return a/b; } }; int main(){ int a,b,c,d,e,x,y,z; a=1,b=2,c=3,d=4,e=5; x=Operate<int>::add(a,b); y=Operate<int>::Mul(c,d); z=Operate<int>::Judge(e,b); cout<<x<<" "<<y<<" "<<z<<" "<<endl; return 0; }
上面这个例子是一个模版类的实现。
template<class T>
这句话定义了一个模版类类型。
x=Operate<int>::add(a,b); y=Operate<int>::Mul(c,d); z=Operate<int>::Judge(e,b);
调用使用了模版类的方法时,也是用尖括号指定模版类的具体实现类。
以上就是C++泛型函数及模版类的基本使用方法。
泛型编程广泛的应用于STL标准模版库中,深入学习STL,当然要掌握好泛型编程。