当前位置:编程学习 > C/C++ >>

第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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,