模板与范型编程(非类型模板形参),数组初始化

模板形参不必全都是类型.

在调用函数时非类型形参将用值代替,值的类型在模板形参表中指定.

 e.g.:

#include <iostream>
using namespace std;
typedef int T ;

template <typename T> //<class T>
inline  T subtract(T t1,T t2){
    return t1-t2;
}
template <class T>
class MyCls{
public:
    T t1;
    T GetT(){return t1;}
};
//(非类型模板形参)
//初始化数组
template <typename T,size_t N>
void arr_init(T (&arr)[N])
{
    for(int i=0;i<N;++i){
        arr[i]=0;
    }
}
//计算和
template <typename T,size_t N>
T arr_sum(T (&arr)[N])
{
    T sum=0;
    for(int i=0;i<N;++i){
        sum += arr[i];
    }
    return sum;
}
int main()
{
    int arr[10];
    for(int i=0;i<10;++i){
        cout<<arr[i]<<",";
    }
    cout<<endl;

    arr_init(arr);

    for(int i=0;i<10;++i){
        cout<<arr[i]<<",";
    }
    cout<<endl;
    //赋值后
    for(int i=0;i<10;++i){
        arr[i]=i+1;
    }
    int result= arr_sum(arr);
    cout<<result<<endl;

    /*
    int a= subtract(1,2);
    cout<<a<<",double:"<<subtract(1.1f,2.2f)<<endl;
    MyCls<int> mc1;
    mc1.t1=123;
    cout<<mc1.GetT()<<endl;


    MyCls<double> mc2;
    mc2.t1=123.12345;
    cout<<mc2.GetT()<<endl;
*/
    return 0;
}

原文地址:https://www.cnblogs.com/wucg/p/1859947.html