模板与范型编程(非类型模板形参),数组初始化
模板形参不必全都是类型.
在调用函数时非类型形参将用值代替,值的类型在模板形参表中指定.
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; }