4.Nonetype template parameter:即不代表类型的模板参数。此参数和真正的函数参数很像。
template <class T, int size> //此处的size即为Nonetype template parameter
T* f()
{
T aryT[size]; //注意这句:只有编译期常量可以作数组定义的长度
for( int i = 0; i < size; i++ )
{
aryT[i] = T(i);
}
return aryT;
}
一般,Nonetype template parameter都提供一个编译期常量,此常量可以当作const值来用。
推导Nonetype template parameter的值得过程和普通的template_parameter类似。
像上面的函数定义,光靠函数调用没法推导出参数T 和 size的值,得显示调用:
f<int, 3>();
下面例子中靠数组的引用来推导出Nonetype parameter的值:
template <class T, int size>
T f(T (&rt)[size])
{
T sum = T(); //注意这句:只有编译期常量可以作数组定义的长度
for( int i = 0; i < size; i++ )
{
sum += rt[i];