打印

C++模板 - 0(开始之前)

0

C++模板 - 0(开始之前)

95年大四的时候,开始接触C++。工作后算是比较系统全面地学习了C  语言,不过也仅仅是面向对象部分,那个时候以为这些就是C++的全部,对着23种设计模式顶礼膜拜。唯一的收获就是狂啃了MFC的四大天王,终于打通了MFC的任督二脉。

后来转战C#,丰富的界面库,简化的开发流程,以为找到了至爱,“C++远远没有它方便”。不过对于C#的泛型总是感觉别扭,用起来限制很多,“看来没有十全十美的”。前几年换了工作,重新回到了C++的阵营。刚开始我颇为遗憾,用了十多年,真的不想失去C#的优雅。但是很快就发现C  早已是脱胎换骨了,特别是模板技术,完全符合我对泛型编程的想象,而且超越很多,“太酷了!”

这几年我边工作边学习C++的新特性,从C++11到C++20,一路走来,惊喜不断。“C++是一门完美的语言,特别是模板,无与伦比!”想想我差一点就错过,真是有点后怕啊。

C++模板博大精深,它高效无比,但又异常锋利,稍有不慎就会鲜血淋漓。调试C++的模板代码绝对是个噩梦,不过它特有的迷人气质又让我欲罢不能。

我想把自己的学习过程记录下来,主要是方便自己整理。水平有限,文字粗浅,希望对你能有所帮助。如果文中有错误,欢迎留言,一起学习,一起进步。

先说说为什么需要模板吧。

我想最初的想法也许只是出于参数类型化,减少重复代码。比如说实现某个通用算法,针对不同的数据类型,其中的绝大多数代码是相同的,只有少部分针对特定数据类型的处理不一样。你的选择可能不外乎有三个:

1. 针对不同的数据类型,你不停地复制粘贴,然后修改那些不一样的地方。
2. 求助于void*或者object这样的基类。
3. 定义宏,使用预处理。

但上面三种方法的缺点不言而喻:你在不停地重复发明轮子,如果后来有修改,你不得不逐一修改每个轮子;使用void*或基类,你的代码结构会相当复杂,你要仔细处理类型的差别,或者使用繁杂的继承体系;宏只是简单的文本替换,没有类型和其他安全性的检查。使用模板会是最好的选择。

不过模板的用法已经大大超越了最初的设计,随着各种使用方式和技术的发现或挖掘,泛型编程范式已经非常成熟,STL就是一个非常好的样例。它并非一个传统的OO库,你看不到多少继承(所以千万不要用Java或C#的学习经验来学习STL),充斥其中的是泛型设计的核心,概念。

好了,先到这里,下次正式开始学习,套用20年前计算机类书籍的一个非常流行的书名,“XXX从入门到精通”,前面是对,咱们打算入门,精通可万万不敢说。

[ 本帖最后由 upup22you 于 2024-6-15 19:59(GMT+8) 编辑 ]
本帖最近评分记录
  • jianci 金币 +8 感谢分享,论坛有您更精彩! 2024-6-15 10:57

TOP

0
CPP后两位没显示出来,只显示了个C。我还想C什么时候有的模板呢,懵了。
毕业后一直在用C,希望能从老哥这里补盲CPP的知识,等老哥分享了。
本帖最近评分记录

TOP

0
不好意思,这个是我之前写的一篇文章,拷贝的时候没有注意。其实是学习的一个总结。C++是我的主业,毕业后用过不少其它语言,但是C++,其实是C++11之后的现代C++,太完美了。不过模板机制非常复杂 ,但是无比强大。如果你之前对C++的普通语法不熟悉的话,模板会非常难理解。
本帖最近评分记录

TOP

0
按照我自己的经验, 工作里用到模版的地方真的很少, 和标准库里各种黑科技差别巨大

来看看老鸟是怎么用的

TOP

0
没想到在这里还能看到C++的东西。模板感觉在游戏引擎的编写等那些基建属性很强的项目里用的比较多

TOP

0
对学习C++很有兴趣,但是也看到一些对C++不好的评价,我觉得还是要看用在什么地方吧。

TOP

当前时区 GMT+8, 现在时间是 2025-3-13 02:06