C++模板特性与未来扩展方向
1. C++模板特性回顾
在C++模板机制中,全特化从一开始就是其组成部分。而函数模板重载和类模板部分特化则是后来才出现的。HP aC++编译器是首个实现函数模板重载的编译器,EDG的C++前端则是首个实现类模板部分特化的。
模板特化具有终止无限递归模板定义的能力,这一特性早已为人所知。例如,在某些情况下,模板特化可以避免无限递归,像之前提到的 List<T*> 示例。而Erwin Unruh可能是第一个注意到这一特性可以引出模板元编程概念的人,即利用模板实例化机制在编译时进行非平凡的计算。
目前,只有类模板可以进行部分特化,这主要是历史原因造成的。虽然也有可能为函数模板定义类似的部分特化机制,但函数模板重载的效果在某些方面与之相似,不过也存在一些细微差别。在查找模板时,对于类模板,首先只考虑主模板,之后再考虑特化版本以确定使用哪个实现;而对于重载的函数模板,需要将所有重载模板都纳入重载集合进行查找,它们可能来自不同的命名空间或类,这在一定程度上增加了意外重载模板名称的可能性。
另外,虽然可以设想允许类模板进行某种形式的重载,例如:
// invalid overloading of class templates
template<typename T1, typename T2> class Pair;
template<int N1, int N2> class Pair;
但目前似乎并没有迫切的需求。
超级会员免费看
订阅专栏 解锁全文

1970

被折叠的 条评论
为什么被折叠?



