在花费了长达半年的时间断断续续阅读完《C++编程思想(上下)》和《Accelerated C++》三本基础读物后,总算是把C++好好温习了。下面开始继续学习泛型编程和STL,站在这个开端,有点茫然,还好看到了侯捷老师的如下建议,受益匪浅:
泛型技术的三个学习阶段:
王国维说大事业大学问者的人生有三个境界。依我看,泛型技术的学习也有三个境界:
第一个境界 是使用 STL。对程式员而言,诸多抽象描述,不如实象的程式码直指人心。
第二个境界 是了解泛型技术的内涵与 STL 的学理。除了前述的软体概念分类学,最好再对数个 STL 组件(不必太多,但最好涵盖各类型)做一番深刻追踪。STL 原始码都在手上(就是相应的那些表头档嘛),好好做几个个案研究,便能够对泛型技术以及 STL 的学理有深刻的掌握。
第三个境界 是扩充 STL。当 STL 不能满足我们的需求,我们必须有能力动手写一个可融入 STL 体系中的软体组件。要到达这个境界之前,可得先彻底了解 STL,也就是先通过第二境界的痛苦折磨。
第零境界 :泛型技术的基本门槛 在 C++ 环境中学习泛型技术,首要是把 template 相关语法与语意搞清楚。包括 class templates, function templates, member templates, specialization, partial specialization。更往基础看去,由於 STL 大量运用了 operater overloading(运算子多载化),所以这个技法也必须熟捻。
鉴于侯捷老师以上的建议,结合在《Genericity/STL 大系 》 中的对经典书籍的评述,我个人总结了下在几个境界时,应该对应阅读以下书籍:
第零境界:《C++ Templates》
第一个境界:《C++标准程序库》《Effective STL》
第二个境界:《泛型编程与STL》《STL源码剖析》
第三个境界:《泛型编程与STL》《C++标准程序库》
看到这份书单,我觉得也算是覆盖了市面上公认的STL经典书籍了,另外我还发现了本《STL扩展技术手册 卷I:集合和迭代器》(奇怪,没发现卷2),不知写得如何,可能在第三个境界上能用到吧,有待验证。
路漫漫其修远兮 ,吾将上下而求索
在通往专家的道路上没有终点
頑張れ