在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例C/C++语言基础 → c++ template second

c++ template second

C/C++语言基础

下载此实例
  • 开发语言:C/C++
  • 实例大小:2.47M
  • 下载次数:17
  • 浏览次数:67
  • 发布时间:2021-08-28
  • 实例类别:C/C++语言基础
  • 发 布 人:耿子衿
  • 文件格式:.pdf
  • 所需积分:2
 相关标签: c++ AT EC co

实例介绍

【实例简介】

本书第一版大约出版于 15 年前。起初我们的目的是编写一本对 C 工程师有帮 助的 C 模板权威指南。目前该项目从以下几个方面来看是成功的:它的作用得 到了不少读者的认可,也多次被推荐为参考书目,并屡获好评。 第一版已经很老了,虽然其中不少内容对 modern C 工程师依然很有帮助,但 是鉴于 C 近年来的不断发展,比如 modern C 中从 C 11 到 C 14,再到 C 17 标准的制定,对第一版中部分内容的修订势在必行。 对于第二版,我们的宗旨依然没有变:提供 C 模板的权威指南,它既应该是一 本内容全面的参考书,也应是一本容易理解的教程。只是这一次我们针对的是 modern C ,它要远远复杂于本书第一版出版时的那个 C 。 目前的 C 编程环境要好于本书第一版发布之时。比如这期间出现了一些深入探 讨模板应用的书籍。更重要的是,我们可以从互联网上获取更多的 C 模板知识, 以及基于模板的编程技术和应用实例。因此在这一版中,我们将重点关注那些可 以被广泛应用的技术。 第一版中的部分内容目前来看已经过时了,因为 modern C 提供了可以完成相 同功能,但又颇为简单的方法。因此这一部分内容会被从第二版中删除,不过不 用担心,modern C 中对应的更为先进的内容会被加入进来。 尽管 C 模板的概念已经出现了 20 多年了,目前 C 开发者社区中依然会不断发 现其在软件开发中新的应用场景。本书的目标之一是和读者分享这些内容,当然 也希望能够启发读者产生新的理解和发现。

【实例截图】C 模板_第二版.pdf

【核心代码】

目录
目录
C   模板(第二版).........................................................................................................................1
关于本书............................................................................................................................................. 2
阅读本书前应该具备哪些知识?.....................................................................................................2
如何阅读本书.....................................................................................................................................3
C  11,14 和 17 标准........................................................................................................................3
目录..................................................................................................................................................... 5
第一部分............................................................................................................................................. 1
基础知识.....................................................................................................................................1
为什么要使用模板?.................................................................................................................1
第 1 章 函数模板(Function Templates).......................................................................................3
1.1 函数模板初探......................................................................................................................3
1.1.1 定义模板...................................................................................................................3
1.1.2 使用模板...................................................................................................................4
1.1.3 两阶段编译检查(Two-Phase Translation )........................................................5
1.1.4 编译和链接................................................................................................................6
1.2 模板参数推断......................................................................................................................6
类型推断中的类型转换.....................................................................................................7
对默认调用参数的类型推断.............................................................................................8
1.3 多个模板参数......................................................................................................................8
1.3.1 作为返回类型的模板参数...................................................................................... 9
1.3.2 返回类型推断 .......................................................................................................10
1.3.3 将返回类型声明为公共类型(Common Type).................................................11
1.4 默认模板参数....................................................................................................................12
1.5 函数模板的重载................................................................................................................13
1.6 难道,我们不应该...?.....................................................................................................17
1.6.1 按值传递还是按引用传递?................................................................................ 18
1.6.2 为什么不适用 inline?.......................................................................................... 18
1.6.3 为什么不用 constexpr?........................................................................................18
1.7 总结....................................................................................................................................19
第 2 章 类模板(Class Templates)............................................................................................... 20
2.1 Stack 类模板的实现........................................................................................................... 20
2.1.1 声明一个类模板.....................................................................................................21
2.1.2 成员函数的实现.....................................................................................................22
2.2 Stack 类模板的使用........................................................................................................... 23
2.3 部分地使用类模板............................................................................................................25
2.3.1 Concept(最好不要汉化这一概念)....................................................................26
2.4 友元....................................................................................................................................26
2.5 模板类的特例化................................................................................................................28
2.6 部分特例化........................................................................................................................29
五车书馆
多模板参数的部分特例化...............................................................................................30
2.7 默认类模板参数................................................................................................................31
2.8 类型别名(Type Aliases)................................................................................................33
Typedefs 和 Alias 声明....................................................................................................33
Alias Templates(别名模板)......................................................................................... 34
Alias Templates for Member Types(class 成员的别名模板)......................................34
Type Traits Suffix_t (Suffix_t 类型萃取).................................................................... 35
2.9 类模板的类型推导............................................................................................................35
类模板对字符串常量参数的类型推断(Class Template Arguments Deduction with
String Literals )...............................................................................................................36
推断指引(Deduction Guides)......................................................................................38
2.10 聚合类的模板化(Templatized Aggregates)...............................................................39
2.11 总结..................................................................................................................................39
第 3 章 非类型模板参数.................................................................................................................41
3.1 类模板的非类型参数........................................................................................................41
3.2 函数模板的非类型参数....................................................................................................43
3.3 非类型模板参数的限制....................................................................................................44
避免无效表达式...............................................................................................................45
3.4 用 auto 作为非模板类型参数的类型..............................................................................46
3.4 总结....................................................................................................................................49
第 4 章 变参模板.............................................................................................................................50
4.1 变参模板............................................................................................................................50
4.1.1 变参模板实列.........................................................................................................50
4.1.2 变参和非变参模板的重载.................................................................................... 51
4.1.3 sizeof... 运算符........................................................................................................52
4.2 折叠表达式........................................................................................................................53
4.3 变参模板的使用................................................................................................................55
4.4 变参类模板和变参表达式................................................................................................56
4.4.1 变参表达式.............................................................................................................56
4.4.2 变参下标(Variadic Indices)............................................................................... 57
4.4.3 变参类模板.............................................................................................................58
4.4.4 变参推断指引.........................................................................................................59
4.4.5 变参基类及其使用................................................................................................ 59
4.5 总结....................................................................................................................................61
第 5 章 基础技巧.............................................................................................................................62
5.1 typename 关键字............................................................................................................... 62
5.2 零初始化............................................................................................................................63
5.3 使用 this->..........................................................................................................................65
5.4 使用裸数组或者字符串常量的模板............................................................................... 65
5.5 成员模板............................................................................................................................68
成员模板的特例化...........................................................................................................72
特殊成员函数的模板.......................................................................................................73
5.5.1 .template 的使用..................................................................................................... 73
5.5.2 泛型 lambdas 和成员模板.....................................................................................74
五车书馆
5.6 变量模板............................................................................................................................74
用于数据成员的变量模板...............................................................................................76
类型萃取 Suffix_v.............................................................................................................77
5.7 模板参数模板....................................................................................................................77
模板参数模板的参数匹配...............................................................................................79
5.8 总结....................................................................................................................................82
第 6 章 移动语义和 enable_if<>.................................................................................................... 83
6.1 完美转发(Perfect Forwarding).....................................................................................83
6.2 特殊成员函数模板............................................................................................................86
6.3 通过 std::enable_if<>禁用模板........................................................................................ 89
6.4 使用 enable_if<>................................................................................................................90
禁用某些成员函数...........................................................................................................92
6.5 使用 concept 简化 enable_if<>表达式............................................................................ 94
6.6 总结....................................................................................................................................95
第 7 章 按值传递还是按引用传递?.............................................................................................96
7.1 按值传递............................................................................................................................96
按值传递会导致类型退化(decay).............................................................................98
7.2 按引用传递........................................................................................................................98
7.2.1 按 const 引用传递..................................................................................................98
7.2.2 按非 const 引用传递............................................................................................100
7.2.3 按转发引用传递参数(Forwarding Reference).............................................. 102
7.3 使用 std::ref()和 std::cref() (限于模板)..................................................................103
7.4 处理字符串常量和裸数组............................................................................................. 105
7.4.1 关于字符串常量和裸数组的特殊实现.............................................................. 106
7.5 处理返回值......................................................................................................................107
7.6 关于模板参数声明的推荐方法..................................................................................... 108 一般性建议.....................................................................................................................108
不要过分泛型化.............................................................................................................109
以 std::make_pair<>为例............................................................................................... 109
7.7 总结..................................................................................................................................110
第 8 章 编译期编程.......................................................................................................................112
8.1 模板元编程......................................................................................................................112
8.2 通过 constexpr 进行计算................................................................................................114
8.3 通过部分特例化进行路径选择..................................................................................... 115
8.4 SFINAE (Substitution Failure Is Not An Error, 替换失败不是错误)................................ 117
SFINAE and Overload Resolution....................................................................................119
8.4.1 通过 decltype 进行 SFINAE(此处是动词)的表达式..................................... 120
8.5 编译期 if...........................................................................................................................121
8.6 总结..................................................................................................................................123
第 9 章 在实践中使用模板...........................................................................................................124
9.1 包含模式..........................................................................................................................124
9.1.1 链接错误...............................................................................................................124
9.1.2 头文件中的模板.................................................................................................. 125
9.2 模板和 inline....................................................................................................................126
五车书馆
9.3 预编译头文件..................................................................................................................127
9.4 破译大篇幅的错误信息..................................................................................................129
简单的类型不匹配情况.................................................................................................129
9.5 后记..................................................................................................................................137
9.6 总结..................................................................................................................................138
第 10 章 模板基本术语.................................................................................................................139
10.1 “类模板”还是“模板类”....................................................................................... 139
10.2 替换,实例化,和特例化........................................................................................... 139
10.3 声明和定义....................................................................................................................140
10.3.1 完整类型和非完整类型(complete versus incomplete types).................... 141
10.4 唯一定义法则................................................................................................................142
10.5 Template Arguments versus Template Parameters........................................................ 142
10.6 总结................................................................................................................................143
第 11 章 泛型库.............................................................................................................................145
11.1 可调用对象(Callables)............................................................................................. 145
11.1.1 函数对象的支持................................................................................................ 146
11.1.2 处理成员函数以及额外的参数........................................................................ 147
11.1.3 函数调用的包装................................................................................................ 149
11.2 其他一些实现泛型库的工具....................................................................................... 151
11.2.1 类型萃取.............................................................................................................151
11.2.2 std::addressoff()...................................................................................................153
11.2.3 std::declval().........................................................................................................153
11.3 完美转发临时变量........................................................................................................154
11.4 作为模板参数的引用....................................................................................................154
11.5 推迟计算(Defer Evaluation).....................................................................................158
11.6 在写泛型库时需要考虑的事情................................................................................... 159
11.7 总结................................................................................................................................160
第 18 章 模板的多态性.................................................................................................................161
18.1 动态多态(dynamic polymorphism)......................................................................... 161
18.2 静态多态........................................................................................................................163
18.3 动态多态 VS 静态多态............................................................................................... 166
术语.................................................................................................................................166
优点和缺点.....................................................................................................................167
结合两种多态形式.........................................................................................................167
18.4 使用 concepts................................................................................................................ 168
18.5 新形势的设计模式........................................................................................................169
18.6 泛型编程(Generic Programming)............................................................................170
18.7 后记................................................................................................................................173
第 19 章 萃取的实现.....................................................................................................................174
19.1 一个例子:对一个序列求和....................................................................................... 174
19.1.1 固定的萃取(Fixed Traits).............................................................................. 174
19.1.2 值萃取(Value Traits)......................................................................................177
19.1.3 参数化的萃取.................................................................................................... 181
19.2 萃取还是策略以及策略类(Traits versus Policies and Policies Classes)................. 182
五车书馆
19.2.1 萃取和策略:有什么区别?(Traits and Policies: What’s the Difference?)184
19.2.2 成员模板还是模板模板参数?(Member Templates versus Template Template
Parameters).................................................................................................................. 185
19.2.3 结合多个策略以及/或者萃取(Combining Multiple Policies and/or Traits)186
19.2.4 通过普通迭代器实现累积(Accumulation with General Iterators).............186
19.3 类型函数(Type Function).........................................................................................187
19.3.1 元素类型(Element Type)............................................................................... 188
19.3.2 转换萃取(Transformation Traits)..................................................................190
19.3.3 预测型萃取(Predicate Traits)....................................................................... 196
19.3.4 返回结果类型萃取(Result Type Traits)........................................................199
19.4 基于 SFINAE 的萃取(SFINAE-Based Traits)............................................................. 201
10.4.1 用 SFINAE 排除某些重载函数...........................................................................201
19.4.2 用 SFINAE 排除偏特化.......................................................................................205
19.4.3 将泛型 Lambdas 用于 SFINAE(Using Generic Lambdas for SFINAE)...........207
19.4.4 SFINAE 友好的萃取.............................................................................................209
19.5 IsConvertibleT..................................................................................................................213
19.6 探测成员(Detecting Members)............................................................................... 215
19.6.1 探测类型成员(Detecting Member Types)................................................... 215
19.6.2 探测任意类型成员............................................................................................ 217
19.6.3 探测非类型成员................................................................................................ 218
19.6.4 用泛型 Lambda 探测成员................................................................................. 222
19.7 其它的萃取技术............................................................................................................224
19.7.1 If-Then-Else.......................................................................................................... 224
19.7.2 探测不抛出异常的操作.................................................................................... 227
19.7.3 萃取的便捷性(Traits Convenience)..............................................................229
19.8 类型分类(Type Classification)..................................................................................231
19.8.1 判断基础类型(Determining Fundamental Types)....................................... 232
19.8.2 判断复合类型.................................................................................................... 234
19.8.3 识别函数类型(Identifying Function Types)................................................. 237
19.8.4 判断 class 类型(Determining Class Types)...................................................239
19.8.5 识别枚举类型(Determining Enumeration Types)........................................239
19.9 策略萃取(Policy Traits)............................................................................................ 240
19.9.1 只读参数类型.................................................................................................... 240
19.10 在标准库中的情况..................................................................................................... 243
19.11 后记..............................................................................................................................244
第 20 章 基于类型属性的重载(Overloading on Type Properties).........................................245
20.1 算法特化(我更愿意称之为算法重载,见注释)................................................... 245
20.2 标记派发(Tag Dispatching)...................................................................................... 247
20.3 Enable/Disable 函数模板............................................................................................... 248
20.3.1 提供多种特化版本............................................................................................ 250
20.3.2 EnableIf 所之何处(where does the EnableIf Go)?........................................251
20.3.3 编译期 if............................................................................................................. 253
20.3.4 Concepts...............................................................................................................254
20.4 类的特化(Class Specialization)................................................................................ 255
五车书馆
20.4.1 启用/禁用类模板...............................................................................................256
20.4.2 类模板的标记派发............................................................................................ 257
20.5 实例化安全的模板(Instantiation-Safe Templates)................................................. 260
20.6 在标准库中的情况........................................................................................................265
20.7 后记................................................................................................................................265
第 21 章 模板和继承.....................................................................................................................267
21.1 空基类优化(The Empty Class Optimization,EBCO)..............................................267
21.1.1 布局原则.............................................................................................................267
21.1.2 将数据成员实现为基类.................................................................................... 270
21.2 The Curiously Recurring Template Pattern (CRTP)......................................................... 272
21.2.1 The Barton-Nackman Trick...................................................................................274
21.2.2 运算符的实现(Operator Implementations).................................................277
21.2.3 Facades.................................................................................................................278
21.3 Mixins(混合?).......................................................................................................... 284
21.3.1 Curious Mixins......................................................................................................287
21.3.2 Parameterized Virtuality(虚拟性的参数化)..................................................287
21.4 Named Template Arguments(命名的模板参数)......................................................288
21.5 后记................................................................................................................................291
第 22 章 桥接 static 和 dynamic 多态.......................................................................................... 293
22.1 函数对象,指针,以及 std:function<>.......................................................................293
22.2 广义函数指针................................................................................................................295
22.3 桥接接口(Bridge Interface)......................................................................................297
22.4 类型擦除(Type Erasure)...........................................................................................298
22.5 可选桥接(Optional Bridging)...................................................................................299
22.6 性能考量........................................................................................................................302
22.7 后记................................................................................................................................302
第 23 章 元编程.............................................................................................................................303
23.1 现代 C  元编程的现状................................................................................................ 303
2.3.1.1 值元编程(Value Metaprogramming)...........................................................303
23.1.2 类型元编程.........................................................................................................304
23.1.3 混合元编程.........................................................................................................305
23.1.4 将混合元编程用于“单位类型”(Units Types,可能翻译的不恰当).....307
23.2 反射元编程的维度........................................................................................................310
23.3 递归实例化的代价........................................................................................................311
23.3.1 追踪所有的实例化过程.................................................................................... 313
23.4 计算完整性....................................................................................................................314
23.5 递归实例化和递归模板参数....................................................................................... 314
23.6 枚举值还是静态常量....................................................................................................315
23.7 后记................................................................................................................................316
第 24 章 类型列表(Typelists)..................................................................................................320
24.1 类型列表剖析(Anatomy of a Typelist).................................................................... 320
24.2 类型列表的算法............................................................................................................322
24.2.1 索引(Indexing)...............................................................................................322
24.2.2 寻找最佳匹配.................................................................................................... 323
五车书馆
24.2.3 向类型类表中追加元素.................................................................................... 325
24.2.4 类型列表的反转................................................................................................ 327
24.2.5 类型列表的转换................................................................................................ 328
24.2.6 类型列表的累加(Accumulating Typelists)................................................... 329
24.2.7 插入排序.............................................................................................................331
24.3 非类型类型列表(Nontype Typelists)...................................................................... 334
24.3.1 可推断的非类型参数........................................................................................ 336
24.4 对包扩展相关算法的优化(Optimizing Algorithms with Pack Expansions )......... 337
24.5 Cons-style Typelists(不完美的类型列表?).............................................................338
24.6 后记................................................................................................................................340
第 25 章 元组(Tuples).............................................................................................................. 342
25.1 基本的元组设计............................................................................................................342
25.1.1 存储(Storage)................................................................................................ 342
25.1.2 构造.....................................................................................................................344
25.2 基础元组操作................................................................................................................346
25.2.1 比较.....................................................................................................................346
25.2.2 输出.....................................................................................................................347
25.3 元组的算法....................................................................................................................347
25.3.1 将元组用作类型列表........................................................................................ 348
25.3.2 添加以及删除元素............................................................................................ 349
25.3.3 元组的反转.........................................................................................................350
25.3.4 索引列表.............................................................................................................351
25.3.5 通过索引列表进行反转.................................................................................... 352
25.3.6 洗牌和选择(Shuffle and Select )................................................................. 354
25.4 元组的展开....................................................................................................................357
25.5 元组的优化....................................................................................................................357
25.5.1 元组和 EBCO.......................................................................................................358
25.5.2 常数时间的 get()................................................................................................362
25.6 元组下标........................................................................................................................363
25.7 后记................................................................................................................................365

标签: c++ AT EC co

实例下载地址

c++ template second

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警