// 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
请按任意键继续. . .
*/
}