了解隐式接口和编译期多态
加诸于template参数身上的隐式接口,就像加诸于class对象身上的显示接口一样真实,而且两者都在编译器完成检查。就像你无法以一种“与class提供之显式接口矛盾”的方式来使用对象(代码将通不过编译),你也无法在template中使用“不支持template所要求之隐式接口”的对象(代码一样通不过编译)。
请记住
classes和templates都支持接口(interfaces)和多态(polymorphism)。
对classes而言接口时显式的(explicit),以函数签名为中心。多态则是通过virtual函数发生于运行期。
对template参数而言,接口是隐式的(implicit),奠基于有效表达式。多态则是通过template具象化和函数重载解析(function overloading resolution)发生于编译期。