12.5 类模板与无类型参数
优质
小牛编辑
125浏览
2023-12-01
上节的 Sstack 类模扳只用模板首部的类型参数,也可以使用无类型参数(non-type parameter),无类型参数可以有默认参数,一般将无类型参数当作Const处理。例如,模板首都可以取 int elements 参数,如下所示:
template<class T,int elements> // note non-type parameter 然后下列声明:
Stack<double,100) mostRecentSalesFigures;
实例化(在编译时)100个元素的 Stack 模板类mostRecentSalesFigures(使用 double 值)。这个模板类的类型为 Stack<double,100>。类的首部可以包含 private 数据成员,数组声明如下:
T stackHolder[elements]; // array tO hold stack contents
性能提示 12.2
如果可能,在编译时指定容器类(如数组类和堆栈类)的长度(可能通过非类型模板长度参数)可以消除用 new 动态生成空间的执行时开销。
软件工程视点 12.3
如果可能,在编译时指定容器类的长度(可能通过非典型模板长度参数)以避免new无法取得所要内存时造成致命的造行时错误。
练习中要用无类型参数生成第8章开发的Array类的模板。这个模板可以用编译时指定类型的指定元素个数实例化Array对象,而不必在运行时动态生成Array对象的空间。
不符合常用类模板的特定类型的类可以重定义该类型的类模板。例如,可以用一个 Array 类模板实例化任何类型的数组。程序员可以控制某个类型Array类的实例化,如Martian,只要建立类名为 Array<Martian> 的新类即可。