8.7. 总结

我们已经探讨了一种相当复杂的编程模式,它结合了 C++ 的两个方面 —— 泛型编程(模板)和面向对象编程(继承)。正如其名称所示,奇异递归模板模式(CRTP)创建了一个循环结构:派生类从基类继承接口和实现,而基类则通过模板参数访问派生类的接口。CRTP 主要有两种使用模式:一种是真正的静态多态或静态接口,对象主要以基类类型被访问;另一种是扩展接口或委托模式,即直接访问派生类,但其实现通过 CRTP 提供通用功能。后一种模式的应用范围很广,从简单地添加一两个方法,到使用多个构建模块或策略来组合派生类的复杂接口。

下一章将介绍一种利用我们刚刚学到的这种模式的惯用法。这种惯用法还改变了我们传递函数参数的传统方式 —— 不再是按参数顺序传递,而是可以使用与顺序无关的命名参数。