新書推薦:
《
写出心灵深处的故事:踏上疗愈之旅(修订版)(创意写作书系)
》
售價:HK$
66.1
《
控制权视角下的家族企业管理与传承
》
售價:HK$
87.4
《
冯友兰和青年谈心系列
》
售價:HK$
167.3
《
利他主义的生意:偏爱“非理性”的市场(英国《金融时报》推荐读物!)
》
售價:HK$
77.3
《
认知行为疗法:心理咨询的顶层设计
》
售價:HK$
99.7
《
FANUC工业机器人装调与维修
》
售價:HK$
99.7
《
吕著中国通史
》
售價:HK$
62.7
《
爱琴海的光芒 : 千年古希腊文明
》
售價:HK$
199.4
|
編輯推薦: |
本书特色:
? 实战经验总结 24年实际开发经验总结,C 模板开发技术精华。
? 高端知识荟萃 深入讲述C 11/14/17模板与泛型编程、元编程手法。
? 讲解方法科学 知识点由浅入深,基础、进阶、实践,环环相扣。
? 范例覆盖面广 书中给出了大量通俗易懂的实例,便于举一反三。
书中主题:
基础知识 函数模板、类模板、变量模板、别名模板、可变参模板、多态、友元关系、特殊继承等。
进阶知识 引用、类型推断、完美转发、std::enable_if使用、可变参展开形式等。
标准库工具模板 declval、true_type/false_type、void_t、conditional、function等。
萃取与策略技术 固定萃取/值萃取演示、多个SFINAE特性萃取范例演示(is_default_constructible、is_convertible等)、策略技术演示。
元编程 基础概念、混合元编程概念、 typelist实现详解、元组(tuple)实现详解。
标准模板库核心代码实现 list容器/迭代器简单实现、迭代器分类目的详解、典型算法find_if的实现。
|
內容簡介: |
本书是一部详细讲解C 模板与泛型编程知识的书,针对的是希望系统学习C 模板与泛型编程、元编程相关开发知识的中高级C 开发者,所讲解的知识具备一定的难度,书籍包含纸质图书以及教学源代码文件。编写初衷是帮助读者解决各种模板与泛型编程中的语法问题,以免在阅读他人所写的泛型编程代码(如C 标准库代码、Boost库代码)时磕磕绊绊甚至进行不下去。此外,书中也会对一些比较有商业价值的源码进行适当的分析和讲解,以进一步提高读者的实战能力,更好的让读者利用模板与泛型编程技术编写可复用的高质量代码以及供第三方开发者使用的接口库。 书籍有如下比较明显的特点:①注重细节,注重基础;②讲解难度适宜,范例由浅入深;③内容比较全面;④支持C 11/14/17新标准。 全书共分7章:第1章搭建C 编程环境,第2~3章讲述模板开发的基础和进阶知识,第4章介绍C 标准库中常用的各种模板,第5~6章详细通过众多范例展示萃取技术、策略技术以及元编程,第7章动手编写STL中的list容器和对应的迭代器实现源码以期望读者对list容器的实现细节有清晰掌握并触类旁通。
|
關於作者: |
王健伟: 男,1976年9月生,网名狂想(KuangXiang),1995年毕业于哈尔滨工程大学计算机及应用专业,拥有20多年软件开发经验,参与开发过数十个实际项目,涉及网络通信、网络安全、网络游戏等领域,具备极其深厚的软件开发实战经验。曾参与创办深圳知名网络安全公司安络科技有限公司,是中国首套网络安全在线扫描评估系统项目负责人、全球同服独立游戏《冒险之路》制作人。
|
目錄:
|
第1章 C 编程环境介绍
1.1 C 编程环境搭建说明
1.2 创建基本的能运行的C 程序
1.3 Visual Studio中程序的调试方法
1.3.1 普通的断点调试(跟踪调试)
1.3.2 学会调试时查看内存中的内容
1.3.3 “快速监视”对话框
1.3.4 查看“反汇编”窗口
1.4 开启Visual Studio 2019对C 标准的编译支持
第2章 模板基础知识
2.1 函数模板
2.1.1 基本范例
2.1.2 实例化
2.1.3 模板参数的推断
2.1.4 重载
2.1.5 特化
2.1.6 默认参数
2.1.7 非类型模板参数
2.2 类模板、变量模板与别名模板
2.2.1 类模板的基本范例和模板参数的推断
2.2.2 类模板的特化
2.2.3 默认参数
2.2.4 类型别名
2.2.5 非类型模板参数
2.2.6 成员函数模板
2.2.7 类/类模板中的类模板(类模板的嵌套)
2.2.8 变量模板与成员变量模板
2.2.9 别名模板与成员别名模板
2.2.10 模板模板参数
2.2.11 共用体模板(联合模板)
2.3 类模板中的友元
2.3.1 友元类
2.3.2 友元函数
2.4 可变参模板
2.4.1 可变参函数模板
2.4.2 折叠表达式
2.4.3 可变参表达式
2.4.4 可变参类模板
2.5 多态在模板中的应用
2.6 模板的特殊继承关系
2.6.1 奇异(奇特)的递归模板模式
2.6.2 混入
2.7 模板代码的组织结构与模板的显式实例化和声明
2.7.1 模板代码的组织结构
2.7.2 模板的显式实例化、模板声明、代码组织结构
第3章 模板进阶知识
3.1 引用
3.1.1 类型区别的基本含义
3.1.2 基本认识
3.1.3 引用资格的剥夺与辨认
3.2 类型推断
3.2.1 如何查看类型推断结果
3.2.2 理解函数模板类型推断
3.2.3 auto类型常规推断
3.3 完美转发
3.3.1 完美转发的概念和步骤演绎
3.3.2 std::forward
3.3.3 普通参数的完美转发
3.3.4 在构造函数模板中使用完美转发范例
3.3.5 在可变参数模板中使用完美转发范例
3.3.6 完美转发失败的情形一例
3.4 std::enable_if的使用
3.4.1 一个简单范例
3.4.2 替换失败并不是一个错误(SFINAE)
3.4.3 enable_if
3.5 类模板中可变参的逐步展开
3.5.1 myclasst继承
3.5.2 myclasst...继承
3.5.3 myclasst...继承
3.5.4 myclasst...继承
第4章 标准库的典型内容
4.1 std::declval
4.1.1 基本概念和常规范例
4.1.2 std::declval返回右值引用类型的原因
4.1.3 推导函数返回值范例
4.2 std::true_type和std::false_type
4.3 std::void_t
4.3.1 源码分析和常规范例
4.3.2 编译器如何选择泛化版本和特化版本
4.3.3 借助void_t和declval实现is_copy_assignable
4.3.4 综合范例
4.4 std::conditional
4.5 std::function的实现
4.5.1 标准库中的std::function
4.5.2 实现类似std::function的功能
4.6 std::remove_all_extents
4.7 std::integer_sequence
4.7.1 正向排列数字生成一个类型Integer_Sequence
4.7.2 逆向排列数字生成一个类型Integer_Sequence_Reverse
4.7.3 将一个数字重复多次生成一个类型Repeat_Integer
4.8 std::is_union、std::is_class和std::integral_constant
4.8.1 std::is_union
4.8.2 std::is_class
4.8.3 std::integral_constant
第5章 萃取技术与策略技术
5.1 萃取技术及固定萃取演示
5.1.1 一个常规范例
5.1.2 迭代器范例
5.1.3 通过容器(数组)类型萃取元素类型范例
5.1.4 引用类型的移除和增加
5.1.5 const修饰符的移除
5.1.6 退化技术
5.2 萃取技术中的值萃取演示
5.2.1 一个常规范例
5.2.2 判断是否为void类型的范例
5.2.3 判断两个类型是否相同
5.3 使用SFINAE特性的信息萃取
5.3.1 用成员函数重载实现is_default_constructible
5.3.2 用成员函数重载实现is_convertible
5.3.3 用成员函数重载实现is_class
5.3.4 用成员函数重载实现is_base_of
5.3.5 用类模板特化实现is_default_constructible
5.4 将trait类模板用作模板参数
5.5 策略技术中的算法策略
5.5.1 常规范例:普通策略类
5.5.2 常规范例:策略类模板
5.5.3 萃取技术与策略技术的比较
第6章 元编程
6.1 术语、元函数
6.1.1 术语
6.1.2 元函数
6.2 混合元编程
6.2.1 常规的计算点积范例
6.2.2 混合元编程计算点积
6.3 typelist实现(类型计算范例)
6.3.1 设计和基本操作接口(算法)
6.3.2 扩展操作接口(算法)
6.3.3 typelist的老式设计与typelist的思考
6.4 tuple实现
6.4.1 重要基础知识回顾
6.4.2 元组基本概念、基础代码的设计和实现
6.4.3 操作接口(算法)
第7章 标准模板库代码
7.1 list容器的简单实现
7.1.1 基础代码
7.1.2 插入新元素前的准备
7.1.3 插入新元素
7.1.4 释放容器中元素所占用的内存
7.2 迭代器设计中的分类目的
7.2.1 迭代器的分类
7.2.2 迭代器分类目的详述
7.3 一个典型算法—find_if的简单实现
|
內容試閱:
|
亲爱的读者,如果您读完了笔者的《C 新经典》《C 新经典:对象模型》这两本C 语言基础的书籍,并希望走得更远,那么这本《C 新经典:模板与泛型编程》是笔者推荐给您的一本C 语言进阶书籍,您可以根据自己的实际需要以及个人的发展志向决定是否需要购买并学习本书。
C 语言支持的程序设计方法
C 语言支持多种程序设计方法(编程方法),如面向过程编程、面向对象编程、模板与泛型编程(简称泛型编程)、元编程等,其实元编程也可以归属为泛型编程,只不过元编程用到的一些编程技巧相对特殊。
在日常编程中常用的首先是面向对象编程,通常要实现许多业务逻辑时,采用面向对象编程基本就够了;其次是泛型编程,泛型编程具有独特的特点,其中突出的特点就是在提高代码复用性和减少代码冗余方面,不可替代。虽然泛型编程的学习难度相对较大,但是每个希望成为C 语言开发高手的人,都应该努力学好泛型编程知识。
泛型编程的英文是Generic Programming,简称GP。例如,读者熟悉的C 标准库、Boost库都广泛地使用泛型编程,甚至可以把C 标准库(容器、分配器、迭代器、算法、函数对象、适配器)、Boost库看作用泛型编程实现的商业作品。也有人把泛型编程看作由模板技术衍生出来的,这些观点都普遍存在。
(1)泛型编程的含义:以独立于任何特定类型的方式编写代码。
(2)泛型编程涉及的技术:模板技术是泛型编程的基础,或者说泛型编程就是运用模板进行编程。
很多读者都知道面向对象编程有三大特性:封装、继承与多态。但是不要把这种编程特性和思维带到泛型编程中,泛型编程有很多独特的编程方法,会让您耳目一新。
本书介绍
本书面向希望系统学习C 模板与泛型编程、元编程相关开发知识的中高级C 语言开发者,书中所讲解的知识具备一定的难度。本书的编写初衷是帮助读者解决各种模板与泛型编程中的语法问题,以免读者在阅读他人所写的泛型编程代码(如C 标准库代码、Boost库代码)时磕磕绊绊,甚至进行不下去。此外,本书也会对一些比较有商业价值的源码进行适当的分析和讲解,以进一步提高读者的实战能力,让读者更好地利用模板与泛型编程技术编写可复用的高质量代码以及供第三方开发者使用的接口库。
本书为在C 语言学习道路上有进取心、希望成长为高手的C 程序员所写。如果您希望能够通过阅读诸如C 标准库、Boost库等源码极大地提高自己的开发实力,写出可高复用的代码,甚至有志于写出很棒的程序库作品供第三方使用,那么毫无疑问,本书将助您在泛型编程方面打下良好的基础。
泛型编程方面的知识比较庞杂,C 新标准中也不断增加很多新的语法规则,本书包含C 11/14/17标准方面的泛型编程知识。在讲解的时候,笔者会以尽量讲述常用的知识为目标,对一些偏难、怪且很少用到的知识不予涉猎,如果读者有需要,可以自行根据实际情况完善自己的知识体系。
模板与泛型编程方法虽然不如面向对象的程序设计方法常用,但作为一名C 开发者,在整个职业生涯中,总是需要拜读一些大师的作品促进自己技术上的提升,而在这些作品中,模板与泛型编程方法是司空见惯的,如果没有这方面的知识积累,就无法读懂大师的作品。同时,在实际编程中,在提高代码复用性和减少代码冗余方面,模板与泛型编程技术也一直有着不可替代的作用,这些都是应该学习好模板与泛型编程技术的重要原因。
本书具有以下比较明显的特点。
(1)内容比较全面。有笔者前几本“C 新经典”系列书作为基础,可以非常平滑地继续进行本书的阅读学习,不存在知识体系断裂导致学习者产生突兀、茫然之感。整本书无论是基础知识,还是高级知识以及演示范例,所涉及的知识点都非常到位,非常全面。
(2)注重细节,注重基础,把很多可能让人觉得比较陌生但基础性的知识以各种范例的形式展示出来,帮助读者打下良好的深入学习基础。
(3)讲解难度适宜,范例由浅入深。读者容易理解,容易消化,读起来顺畅没有障碍。
(4)目前在国内,支持C 11/14/17标准的模板与泛型编程类书还非常少,一些同类书出版的时间大多在十几年前,比较老旧,这给广大渴望学习模板与泛型编程开发知识的读者造成了很大的不便。而本书很好地弥补了目前国内缺少C 11/14/17标准发布后的“C 模板与泛型编程”类书的空白,是一本非常具有价值和意义的图书。
本书共分为7章。
第1章为C 编程环境介绍,搭建C 编程环境并创建一个基本的能运行的C 程序,详细介绍Visual Studio中程序的调试方法,为后续书中内容的正常讲解铺平道路。
第2章为模板基础知识,涉及函数模板、类模板、变量模板、别名模板、可变参模板等诸多的基础概念以及奇异的递归模板模式与混入模式两种常用的编程手法。
第3章为模板进阶知识,以引用概念作为讲解起点,进一步介绍函数模板类型推断和auto类型推断的概念、完美转发的概念和实现,通过对标准库中std::enable_if编译期的分支逻辑的讲解引入SFINAE概念。
第4章为标准库的典型内容,将介绍一些C 标准库中典型且常用的函数模板、类模板、别名模板等功能组件及其实现细节,这些基础组件在模板与泛型编程中会被频繁使用。
第5章为萃取技术与策略技术。用萃取技术和策略技术生成的诸多模板广泛分布于C 标准库中,为程序人员的开发工作提供了极大的方便。第5章将通过诸多范例展示这两种技术在模板与泛型编程中的实际运用。
第6章为元编程。元编程的主要目的在于将各种计算从运行期提前至编译期进行,以实现程序运行时的性能提升,是一种增加程序的编译时间从而减少程序运行时间的一种编程技术。第6章会以两个经典的范例—typelist(类型列表)和tuple(元组)展示元编程的代码编写手法,使读者对元编程能够达到的效果有比较深刻的认识。
第7章为标准模板库代码,通过模板与泛型编程技术编写标准模板库(STL)中list容器以及配套迭代器的源码,让读者对这类核心的STL部件实现机制有更深刻的了解。本章还会对容器中迭代器分类目的进行剖析,后,通过讲解一个算法—find_if的实现源码让读者掌握如何将可调用对象当作算法中的参数使用。
在成书的过程中,笔者参考了大量C 经典著作,并尽努力通过网络寻找一切对本书的书写有用的资料,通过已有认知进行精挑细选并认真实践,做到了既不遗漏重要的知识点,又不去涉及太复杂需要耗费相当心力去研究的各种代码片段(功能组件),这种代码片段更适合读者日后在有兴趣和必要的情况下慢慢研究。笔者的心愿是通过自己的表达把这些知识更通俗地传达给读者,可能让读者只花费1/5甚至1/10的精力就能获得相同的知识,让读者能够凭借本书入门C 模板与泛型编程,有了这样的基础,后面的自我提升就是“海阔凭鱼跃,天高任鸟飞”了。笔者为本书的编写付出了数月的时间和极大的心血。在这里,笔者发自内心地感谢诸多C/C 前辈在这个行业中多年的耕耘及对知识的积累和传播的贡献,感谢他们的奉献。
需要的基础知识
阅读本书,需要读者对C 基础编程知识有不错的掌握,建议有1~2年使用C 编程的经验,对STL应该有一定的使用能力,对C 11/14/17标准有一定的了解。当然,还希望读者对C 基础的模板编程知识有一些掌握,知道基础的函数模板和类模板如何书写。但如果读者对模板编程一无所知,甚至连见都未见过,此时建议先阅读笔者所著的《C 新经典》一书的“模板与泛型”一章。《C 新经典》是一本超值的书,可能会超出您的期待,希望您能够拥有!
阅读建议
在学习本书的过程中,笔者一如既往地提醒您:本节的内容没学明白,绝不可以往下学。初学者往往认为C语言中的指针比较难学,而对于一名经验比较丰富的C 程序员,学习模板与泛型编程只会比初学者面对指针的难度更高。本书的内容非常连贯,一旦某节没学明白,后续就根本无法学会。基础差的读者,一节课反复学习3~5遍甚至8~10遍,哪怕学习时间再加长数倍,也一定要在弄懂当前课程的条件下再继续下一节的学习。
在阅读过程中,读者一定要动起手来,书中的内容和代码都要亲自实践验证,并且都要保证验证成功,学习中遇到任何困难,都可以及时找作者或其他读者沟通。切记,动手实践的步骤,是向自己的大脑中深入镌刻真正知识的步骤,一旦缺少这个步骤,记忆就会不深,掌握的知识就会不牢,必然会自食苦果。
运行环境
本书的范例全部在Windows操作系统下的Visual Studio 2019集成开发环境下调试通过(需要开启编译器对C 17标准的支持)。之所以选择这个平台环境,是因为它对开发者相当友好,开发和调试程序特别方便,尤其对初学者,极大地降低了学习难度。
书中也详细阐述了在Windows操作系统下安装Visual Studio 2019的过程。因为书中讲解的内容涉及对C 11/14/17标准语法的支持,所以如果是在Windows操作系统下进行程序开发,硬性要求读者使用的Visual Studio集成开发环境版本不低于Visual Studio 2017。
对于在Linux下从事C/C 开发的读者,只要C/C 编译器支持C 11/14/17标准语法,就完全没有问题,但记得要增加支持C 新标准的编译选项(如g -std=c 17等),书中的范例都可以跨操作系统平台运行。
资料获取
本书有完整的配套学习资料(源码),读者可以免费获取,获取方法如下。
(1)查找并关注“程序员速成”微信公众号。
(2)在微信公众号中,发送“模板”二字,就可以获得配套学习资料下载链接。
致谢
近20年前,笔者写过一本《Crystal Reports水晶报表设计与开发实务》,这本书的撰写实在是太辛苦,通宵达旦,熬了3个多月,每天大概要写到凌晨3点才能休息。书籍完成后,笔者整个人瘦了好几圈。
虽然书籍有一定的销量,但是感觉与付出不成比例。所以,从那时开始,笔者就暗下决心,从此以后再也不写书了。
人算不如天算,2018年下半年,笔者通过网络陆续发布一些C/C 类网络课程。让人意外的是,这些课程获得了学员极好的评价,隐隐有超越市面上绝大多数C/C 类课程的趋势。在这个时候,清华大学出版社盛东亮编辑找到笔者,希望笔者能够写一本优质的C/C 类书籍。
因为多年前出书的辛劳产生的心理阴影,笔者当时本能地拒绝了写书这件事,但从此在笔者的心里却埋下了一颗写书的种子。
几个月之后,笔者终于想通了写书这件事,有两点好处。
(1)帮助更多的读者掌握更多的C 开发知识,为社会尽一点自己的微薄之力,做一个对社会有用的人。
(2)扩大一下自身的知名度,增加自身的收入,毕竟,笔者也需要挣更多的钱养家,通过自己的劳动赚取收入,这是光荣的。
当笔者把出书的想法说给盛东亮编辑听的时候,他非常高兴并与笔者做了深入的沟通,我们二人年纪相仿,聊得很投机,在写书这件事情上观点也非常一致—希望这是一本高质量的、经典的C 书籍,是一本可以摆在书架上10年甚至20年的书籍,如果仅让读者选2~3本好的C 书籍,这必定是其中一本。我相信,读者从书名也能感受到我们对这本书的期盼。
在本书的出版过程中,盛东亮编辑给予了笔者相当大的支持与鼓励,甚至可以说,如果不是他当初的接洽,如果不是后续顺畅愉快的交流,如果不是许多实际的工作都能在短的时间敲定并逐一落实,这本书也许根本不会出现在读者面前。所以,这份感谢,笔者要送给您—盛东亮编辑。
C 语言知识体系庞杂,而C 模板与泛型编程又是具有一定深度和难度的知识,由于水平所限,虽然笔者尽心尽力,但书中疏漏之处在所难免,恳请各位读者不吝指教。
王健伟
|
|