STL学习小记起因

起因是我在尝试Win8的时候做的一个小程序,我将它上传到了网上。于是有一个学生来找我学习,但我的C#造诣仅仅只是一本《C#与.NET4高级程序设计》,然后有一天他们的老师布置给他们一个关于C#模板的作业的时候,我对一直以来的机械式函数使用产生了疑惑。
在某一段时间我曾使用CSharp语言进行开发,在.net2.0之后CSharp支持模板,也挺喜欢它的模板的使用方式,比如where关键字。我怀疑过基于OO的C#既然有一个object基类为什么还需要模板,我的入门书老师在引入模板章节的时候告诉我,是因为装箱和拆箱的操作太耗。
我更偏向于把自己定位成一个C++程序员,为了理解C++中模板的意义。在从业一年多之后又翻出曾经的C++primer,学习STL。
然而在翻了一点C++Primer之后发觉单纯只是为了STL而再翻似乎有些麻烦。
于是一阵google之后找到了侯捷君的一本译作《C++标准程序库》。
但我并没有经历过没有模板的年代,所以也不清楚为什么会有人想到要创造模板这个东西,如果只是单纯地为了在编译前进行替换,不是可以使用宏吗?如果想要比宏安全,可模板也不见得安全多少,比如一个比较函数,C++的模板无法检测比较的两个类型是否有实现了<。而且被称为C++之父的BS先生还一再地声明不应该为模板设计限制,既然如此不是也只能在运行时出错了吗?
如果必须限制这个比较函数的参数类型必须实现了<运算,直接使用类的继承思想,使用实现了ICompare借口的类不是挺好吗?
C++中的模板似乎更像是一个宏。
比如在设计一个模板类的时候,还需要将函数直接内联在头文件中。因为编译之后的代码已经是被特例化之后的了。
诸此种种的疑问,除了使用容器的情况外,我几乎没有使用过模板。
所以,模板的诞生原因是什么?在什么样的情况下才算是正确地使用模板,我非常好奇。带着这样的好奇,我开始学习起C++的标准模板库。

原文地址:https://www.cnblogs.com/pasoraku/p/3014525.html