搜尋此網誌

2011年7月15日 星期五

C++ Function Templates (函式模板)

如果寫了一個function ,ex:兩個整數相加


void sum(int , int);


這樣寫的話可以將整數相加,若是同樣的用法要將兩個double(也就是浮點數)相加的時候,還要再寫一個版本給浮點數使用,這種情況可以運用function template來解決


先宣告function template: 大寫 T可代表任意型態的變數


template <class T> void sum(T , T);


在程式碼實作的部分


void sum(T a, T b) {
cout << a+b;
}


下列是完整的程式:


#include <iostream>
using namespace std;
template <class T> void sum(T, T);

int main() {
int a=1, b=2;
double c=1.1, d=2.2;
sum(a, b) ;
sum(c, d) ;
return 0;
}
template <class T> void sum(T a, T b) {
cout << a+b<<"\n";
}


接下來要介紹(Overloaded Templates)多載化的模板


如果sum()這個函式的名字不變,但傳入的參數改為三個,
那麼這種情形便稱作多載,多載化的版本也是要先宣告template,然後在實做出來.
請注意紅色字的部分是新增出來的多載化的程式碼.





#include <iostream>
using namespace std;
template <class T> void sum(T, T);
template <class T> void sum(T, T, T);

int main() {
int a=1, b=2;
double c=1.1, d=2.2 ,e=3.3;
sum(a, b) ;//3
sum(c, d) ;//3.3
sum(c, d, e)//6.6 ;
return 0;
}
template <class T> void sum(T a, T b) {
cout << a+b<<"\n";
}

template <class T> void sum(T a, T b, T c){
cout << a+b+c<<"\n";
}



沒有留言:

張貼留言