[转]c++模板
轉自:http://www.cnblogs.com/gaojun/archive/2010/09/10/1823354.html
函數模板的寫法
函數模板的一般形式如下:
Template <class或者也可以用typename?T>
返回類型 函數名(形參表)
{//函數定義體 }
說明: template是一個聲明模板的關鍵字,表示聲明一個模板關鍵字class不能省略,如果類型形參多余一個 ,每個形參前都要加class <類型 形參表>可以包含基本數據類型可以包含類類型.
?
請看以下程序:
//Test.cpp
#include?<iostream>
using?std::cout;
using?std::endl;
?
//聲明一個函數模版,用來比較輸入的兩個相同數據類型的參數的大小,class也可以被typename代替,
//T可以被任何字母或者數字代替。
template?<class?T>
T min(T x,T y)
{?return(x<y)?x:y;}
?
void?main( )
{
?????int?n1=2,n2=10;
?????double?d1=1.5,d2=5.6;
???? cout<<?"較小整數:"<<min(n1,n2)<<endl;
???? cout<<?"較小實數:"<<min(d1,d2)<<endl;
???? system("PAUSE");
}
程序運行結果:
?
程序分析:main()函數中定義了兩個整型變量n1 , n2 兩個雙精度類型變量d1 , d2然后調用min( n1, n2); 即實例化函數模板T min(T x, T y)其中T為int型,求出n1,n2中的最小值.同理調用min(d1,d2)時,求出d1,d2中的最小值.
3.?類模板的寫法
定義一個類模板:
Template <?class或者也可以用typename?T >
class類名{
//類定義......
};
說明:其中,template是聲明各模板的關鍵字,表示聲明一個模板,模板參數可以是一個,也可以是多個。
例如:定義一個類模板:
// ClassTemplate.h
#ifndef?ClassTemplate_HH
#define?ClassTemplate_HH
?
template<typename?T1,typename?T2>
class?myClass{
private:
???? T1 I;
???? T2 J;
public:
???? myClass(T1 a, T2 b);//Constructor
?????void?show();
};
?
//這是構造函數
//注意這些格式
template?<typename?T1,typename?T2>
myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b){}
?
//這是void show();
template?<typename?T1,typename?T2>
void?myClass<T1,T2>::show()
{
???? cout<<"I="<<I<<", J="<<J<<endl;
}
#endif
?
// Test.cpp
#include?<iostream>
#include?"ClassTemplate.h"
using?std::cout;
using?std::endl;
?
void?main()
{
???? myClass<int,int> class1(3,5);
???? class1.show();
?
???? myClass<int,char> class2(3,'a');
???? class2.show();
?
???? myClass<double,int> class3(2.9,10);
???? class3.show();
?
???? system("PAUSE");
}
?
最后結果顯示:
?
?
4.非類型模版參數一般來說,非類型模板參數可以是常整數(包括枚舉)或者指向外部鏈接對象的指針。
那么就是說,浮點數是不行的,指向內部鏈接對象的指針是不行的。
template<typename?T,?int?MAXSIZE>
class?Stack{
Private:
?????? T elems[MAXSIZE];
.....
};
?
Int main()
{
?????? Stack<int, 20> int20Stack;
?????? Stack<int, 40> int40Stack;
…
};
轉載于:https://www.cnblogs.com/JieForest/p/3617972.html
總結
- 上一篇: [翻译]DirectX 状态( 转)
- 下一篇: 还在公司