2014-04-01 20 views
3

之間的差異假設我有這樣的代碼:就是專業化和重載

template <class T> void Swap (T& a, T& b) 
{ 
    a ^= b; 
    b ^= a; 
    a ^= b; 
} 

之間有什麼區別:超載

void Swap (int& x, int& s) 
{ 
    //some behavior 
} 
  • 專業化

    1. template<> void Swap <int> (int& x, int& s) 
      { 
          //some behavior 
      } 
      

    和誰更好?

  • +0

    重載決策選擇過載,而如果過載恰好是一個模板,_then_爲適應參數類型特編譯器檢查。 – Xeo

    回答

    1

    重載定義了一個名稱相同的方法,編譯器在找到這個重載方法並且符合它所調用的參數類型時不會嘗試進行模板類型推導。一個簡單的電話,如:

    int a = 1, b = 2; 
        Swap(a,b);   // calls the overloaded method 
    

    將去重載的方法。

    喚起你需要明確地告訴編譯器專業的方法:

    Swap<int>(a,b); // calls the specialized method