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

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

 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;
}