c++,模板函数的定义和使用【初探】

 

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

 

posted @ 2014-11-13 10:10  oucaijun  阅读(3499)  评论(0编辑  收藏  举报
下载TeamViewer完整版 下载TeamViewer