什么是泛型編程?
簡單來說,泛型編程,意思就是針對廣泛類型的編程方式。具體類型可以有不同的實現方式,但是針對廣泛類型編程,就能在需要調用時才指定參數類型或者調用類型。
泛型編程是一種基於發現高效算法的最抽象表示的編程方法。也就是說,以算法為起點並尋找能使其工作並且有效率的工作的最一般的必要條件集。
可以想象的是,很多算法都需要相同的必要條件集,並且這些必要條件集有不同的實現方式。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,當然要掌握好泛型編程。