C++之template <typename T>

  • 現實意義
    意義在於自動地指定數據的類型,以前區別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 的區別

http://zhidao.baidu.com/question/264862813870619165.html

實際上可以說沒有區別。

按 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 則語法錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章