template<typename T>& max(T & a, T & a < b ?
這個模板定義指定了一個“返回兩個值中最大者”的函數家族,這兩個值通過函數參數a , b傳遞給函數模板的,而參數的類型還沒有確定,用模板參數T來代替。
其中,typename可以用class來代替,但是建議使用typename
#include<iostream><> <typename T>& max(T & a, T & a < b ? i = <<<<::max(, i)<< f1 = f2 = <<<<::max(f1, f2)<< s1 = s2 = <<<<::max(s1, s2)<<
template<typename T1, typename T2>& a, T2 & a < b ?, );
可以引入第三個模板實參類型,來定義函數模板的返回類型:
template<typename T1, typename T2, typename RT>& a, T2 &<, , >(, );
行得通,但是很麻煩
template<typename RT, typename T1, typename T2>& a, T2 &<>(, );
#include<iostream><> & max( & a, & a < b ?<typename T>& max(T & a, T & a < b ?<typename T>& max(T & a, T & b, T &<<::max(, , )<<endl; cout<<::max(, )<<endl; cout<<::max(, )<<endl; cout<<::max(, )<<endl; cout<<::max<>(, )<<endl; cout<<::max<>(, )<<endl; cout<<::max(, )<<endl;
#include<iostream><> template<typename T>& max(T & a, T & a < b ? template<typename T>* & max(T* & a, T* & a < b ? inline * & max( * & a, * & *a < *b ?= = s = t = <<::max(s, t)<<endl; * p1 = &* p2 = &<<::max(p1, p2)<<endl; * s1 = * s2 = <<::max(s1, s2)<<endl;
以上在所有實現重載裡面,都是通過引用來傳遞每個實例的,但是一般而言,在重載函數模板的時候,最好只是改變那些需要改變的內容,應該把改變限制在以下兩個方面:
#include<iostream><> template<typename T>& max(T & a, T & a < b ? inline * max( * a, * strcmp(a, b) < ? template<typename T>& max(T & a, T & b, T &<<::max(, , )<<endl; * s1 = * s2 = * s3 = <<::max(s1, s2, s3)<<endl;
錯誤在於:如果對3個C-string調用max,則語句return max(max(a, b), c);將產生錯誤