2010年8月20日 星期五

template 樣板函式

若我們要寫一個交換兩個值的 function,可能吃整數、浮點數、字串、該怎麼辦呢?最簡單的方法就是用 overloading 寫好幾個,另一種方法就是寫樣板函式請前置處理器幫忙。


template <class AnytTpe>
// 也可以 template <typename AnyType>
// 但眾人覺得class容易和類別搞混,所以後期才加入typename識別字
// 舊一點的compiler可能不認識typename,就只好用class了
// 多種typename就用,區隔
// 例如template <typename AnyType1, typename AnyType2>
void Swap(AnyType &a, AnyType &b)
{
  AnyType temp;
  temp = a;
  a = b;
  b = temp;
}


前置處理器就會幫你將各個呼叫Swap的地方複製一份對應參數型態的複本出來,最棒的地方在於 template function 也和一般 function 一樣可以被多載,


void Swap(AnyType &a, AnyType &b);
void Swap(AnyType *a, AnyType *b);

沒有留言:

張貼留言