1、概述
前面对 STL 和泛型编程进行了整理,但还是有一些细节需要进行整理。
1.1、 隐式接口和编译器多态
对于 多态 和 模板的实例化与具象化 我在前面的文章中进行过整理,这里就不赘述了,想了解的可以在点击链接回顾一下。
这里就说一下总结:
- class 和 template 都支持接口 和 多态。
- 对 class 而言接口是显示的,以函数签名为中心。多态则是通过 virtual 函数发生于运行期。
- 对 template 参数而言,接口是隐式的,奠基于有效表达式。多态则是通过 template 具现化和函数重载发生于编译期。
1.2、typename 的双重含义
在 template 的声明式中,使用 class 和 typename 没有什么不同。例如:
template<class T>
class Widget;
template<typename T> //两者相同
class Widget;
然而 C++ 并不是总把 class 和 typename 视为等价,有时候你一定要使用 typename。
在泛型编程中, template 代码内出