1.函數模板的由來和概念:
函數的重載可以實現一個函數名多用,將實現相同的或類似功能的函數用一個函數名來定義。這樣編程者在調用同類函數時感到含義清晰,方法簡單。但在程序中仍然要分別定義每一個函數,例如求三個數的最大值的函數max,它們的函數體是相同的,只是形參不同(int,double,long).
為了解決這個問題,C++提供了函數模板。所謂函數模板,實際上是建立一個通用函數,其函數類型和參數類型不具體指定,用一個虛擬的類型來代表。這個通用函數就稱為函數模板。凡是函數體相同的都可以用這個模板來代替,不必定義多個函數,只須在模板中定義一次即可。在調用函數時系統會根據實參的類型來取代模板中的虛擬類型,從而實現不同函數的功能。
2.應用舉例:
#include?<iostream>using?namespace??std;
template?<typename?T>
T?max(?T?a,T?b,T?c)
{if?(b?>?a){a?=?b;}if?(c?>?a){a?=?c;}return?a;
}int?main()
{int?i1?=?185,i2?=?-76,i3?=?576,i;double?d1?=?56.87,d2?=?90.23,d3?=?-3214.78,d;long?g1?=?67854,g2?=?-912456,g3?=?673456,g;i?=?max(i1,i2,i3);d?=?max(d1,d2,d3);g?=?max(g1,g2,g3);cout<<"i_max?=?"?<<i<<endl;cout<<"d_max?=?"?<<d<<endl;;cout<<"g_max?=?"?<<g<<endl;return?0;
}
3.定義模板的一般形式
template?<typename?T>
通用函數定義或者
template?<class?T>
通用函數定義
4.注意事項
函數模板只適用于函數體相同、函數的參數個數相同而類型不同的情況,如果參數的個數不同,則不能用函數模板。
轉載于:https://blog.51cto.com/4022688/1720691