5.8 小结

模板广泛使用的程度远远超过简单的类型参数化。当对模板结合使用参数类型推断、用户自定义特化和模板元编程的时候,C++模板作为一种强有力的代码产生机制已经形成了。

这里有一个我们没有提及的C++模板的缺陷,就是在解释编译时错误信息报告方面的困难。由于编译器产生总量难以预料的出错信息报告文本可能是完全无法避免的。现在,C++编译器已经改进了它们的模板错误信息报告方式,此外Leor Zolman也已开发了一种名为STLFilt的工具,这种工具采用提取有用信息和抛掉冗余信息的方式,使得汇报的这些错误信息[1]更具可读性。

读者从本章得到的另一个重要的思想就是,一个模板意味着一个接口。也就是说,尽管关键字template意味着:“我可以接受任何类型的参数”,但在模板定义中的代码也要求某些需要提供支持的运算符和成员函数—这些运算符和成员函数就是接口。因此,实际上一个模板定义意味着:“我将接受任何支持这个接口的参数”。若编译器能够仅仅说:“嗨,这种实例化模板的类型参数不支持这个接口—不能使用这个类型”,事情会变得更好一些。运用模板构成的带有“隐含的类型检查”的接口机制,比起那些要求所有的类型都必须从某些基类派生出来的纯面向对象的使用惯例来说更加灵活。

在第6章和第7章中,将深入探讨模板最著名的应用:标准C++库的子集,即广为人知的标准模板库(STL)。第9章和第10章中也用到了本章未提及的某些模板技术。

[1]访问http://www.bdsoft.com/tools/stlfilt.html。