第16章 模板与泛型编程(4)
16.1.5 非类型模板形参
在调用函数时,非类型形参将用值代替,值的类型在模板形参表中指定。
template<class T, size_t N>
void array_init(T (¶m)[N])
{
for(size_t i=0;i!=N;++i)
{
cout<<param[i]<<endl;
}
}
template<class T, size_t N>
void array_init(T (¶m)[N])
{
for(size_t i=0;i!=N;++i)
{
cout<<param[i]<<endl;
}
}int i[]={1,2,3,4};
array_init(i);
int i[]={1,2,3,4};
array_init(i);模板非类型形参是模板定义内部的常量值,在需要常量表达式的时候,可使用非类型形参(就像这里所做的一样)指定数组的长度。
类型等价性与非类型形参
对模板的非类型形参而言,求值结果相同的表达式被认为是等价的。
在函数模板内部完成的操作限制了可用于实例化该函数的类型。程序员的责任是,保证用作函数实参的类型实际上支持所用的任意操作,以及保证在模板使用那些操作的环境中那些操作运行正常。
编写模板代码时,对实参类型的要求尽可能少是很有益的。
虽然简单,但它说明了编写泛型代码的两个重要原则:
模板的形参是const引用。
函数体中的测试只用<比较。
通过将形参设为const引用,就可以允许使用不允许复制的类型。
摘自 xufei96的专栏
补充:软件开发 , C++ ,