// demo.cpp : // 模版函數的定義和使用: // 1.模板支持返回參數類型為模板參數。 // template <typename RET_T , typename IN1_T , typename IN2_T > // RET_T prifunc2(IN1_T in1 , IN2_T in2) { ... } // 2.因為在函數調用時無法直接推斷返回類型,所以可以顯示的提供模板實參。prifunc2<double, int ,int> // 3.模板聲明時RET_T放到第一位,使用時可以只提供返回值類型,而剩余的參數則按常規方式利用形參進行推斷。prifunc2<double> #include<iostream> using namespace std; template <typename RET_T , typename IN1_T , typename IN2_T > RET_T prifunc2(IN1_T in1 , IN2_T in2) { RET_T ret; ret = in1 +in2; cout<<"in1 = "<<in1<<endl; cout<<"in2 = "<<in2<<endl; ret = in1+in2 ; cout<<"ret = "<<ret<<endl; return ret; } int main() { int v = prifunc2<double, int ,int>(11,22);//返回值放在第一位。 int vv = prifunc2<double>(33,44);//可以只提供返回值的聲明,其他會自行推斷出來。 while(1); return 0; } //測試結果: // in1 = 11 // in2 = 22 // ret = 33 // in1 = 33 // in2 = 44 // ret = 77
template <class RET, class T, class V, class X> RET func(T t, V v, X x, int i) { RET ret; cout<<"value="<<t<<endl; cout<<"value="<<v<<endl; cout<<"value="<<x<<endl; cout<<"value="<<i<<endl; ret = t; return ret; } void f2(void) { int i = 11; char c = 39; float f = 9.01; char* str = "hello"; char cstr[] = "haha"; char* p1 = func<char *>(str,c,f,i); char* p2 = func<char *>(str,cstr,c,i); cout<<"p1:"<<p1<<endl; cout<<"p2:"<<p2<<endl; /* value=hello value=' value=9.01 value=11 value=hello value=haha value=' value=11 p1:hello p2:hello 請按任意鍵繼續. . . */ }
