現實意義
意義在於自動地指定數據的類型,以前區別int和float要分別聲明,如:int sum(), float sum(),但使用template< typename T >,就根據傳入的T的類型來決定。如:T sum(), template< int >,那麼這個sum的類型就是int。問題實例
利用函數分別算出int相加的值,和float相加的值。
input:
2 15
12.11 13.00
output:
2
12.11代碼
#include<iostream>
using namespace std;
template <typename T> //typename可以替換成class
T minn(T a,T b)
{
return (a<b)? a:b;
}
int main()
{
int a,b;
cin>>a>>b;
double x,y;
cin>>x>>y;
cout<< minn(a,b)<<endl<<minn(x,y)<<endl;
return 0;
}
- template 和template 的區別
實際上可以說沒有區別。
按 C++ 標準來說,template< typename T > 用於基礎數據類型,typename 指類型名,T 可以取 char int double 等。
template< class T > 用於類,T 可以取任何類。
但是這裏有一個問題,結構體應該用 typename 還是 class? 結構體肯定不是基礎數據類型,但也不是類。
所以實際情況是,template< class T > 的 T 也可以取基礎數據類型,tempate< typename T > 的 T 也可以取類。
但有一個特例,就是當 T 是一個類,而這個類又有子類(假設名爲 innerClass) 時,應該用 template< typename >:
typename T::innerClass myInnerObject;
這裏的 typename 告訴編譯器,T::innerClass 是一個類,程序要聲明一個 T::innerClass 類的對象,而不是聲明 T 的靜態成員,而 typename 如果換成 class 則語法錯誤。