这部著作第一次系统地阐述了模板元编程。全书从内容上大致分为理论和实践两部分。前八章和部分附录内容以Boost元编程库为主线介绍模板元编程的概念、技术、工具及陷阱。其余篇幅则主要讨论模板元编程的一个重要的应用:DSEL(Domain-Specific Embedded Languages,领域特定的嵌入式语言)的设计与实现。本书阅读门槛较高,适合希望了解模板元编程的中、高阶C++程序员尤其是程序库作者阅读。
网站首页 软件下载 游戏下载 翻译软件 电子书下载 电影下载 电视剧下载 教程攻略
书名 | C++模板元编程(附光盘) |
分类 | |
作者 | (美)大卫 |
出版社 | 机械工业出版社 |
下载 | ![]() |
简介 | 编辑推荐 这部著作第一次系统地阐述了模板元编程。全书从内容上大致分为理论和实践两部分。前八章和部分附录内容以Boost元编程库为主线介绍模板元编程的概念、技术、工具及陷阱。其余篇幅则主要讨论模板元编程的一个重要的应用:DSEL(Domain-Specific Embedded Languages,领域特定的嵌入式语言)的设计与实现。本书阅读门槛较高,适合希望了解模板元编程的中、高阶C++程序员尤其是程序库作者阅读。 内容推荐 本书是关于C++模板元编程的著作。本书主要介绍Traits和类型操纵、深入探索元函数、整型外覆器和操作、序列与迭代器、算法、视图与迭代器适配器、诊断、跨越编译期和运行期边界、领域特定的嵌入式语言、DSEL设计演练,另外附录部分还介绍了预处理元编程概述、typename和template关键字。本书通过理论联系实践,深入讲解了C++高级编程技术。 本书适合中、高阶C++程序员等参考。 目录 译者序 序言 前言 致谢 第1章 概述 1 1.1 起步走 1 1.2 元程序的概念 1 1.3 在宿主语言中进行元编程 3 1.4 在C++中进行元编程 3 1.4.1 数值计算 3 1.4.2 类型计算 5 1.5 为何进行元编程 6 1.5.1 替代方案1:运行期计算 6 1.5.2 替代方案2:用户分析 6 1.5.3 为何进行C++元编程 7 1.6 何时进行元编程 7 1.7 为何需要元编程程序库 7 第2章 Traits和类型操纵 9 2.1 类型关联 9 2.1.1 采用一种直接的方式 9 2.1.2 采用一种迂回方式 10 2.1.3 寻找一个捷径 11 2.2 元函数 12 2.3 数值元函数 14 2.4 在编译期作出选择 15 2.4.1 进一步讨论iter_swap 15 2.4.2 美中不足 16 2.4.3 另一个美中不足 17 2.4.4 “美中不足”之外覆器 18 2.5 Boost Type Traits程序库概览 19 2.5.1 一般知识 20 2.5.2 主类型归类(Primary Type Categorization) 20 2.5.3 次类型归类(Secondary Type Categorization) 21 2.5.4 类型属性 22 2.5.5 类型之间的关系 23 2.5.6 类型转化 23 2.6 无参元函数 23 2.7 元函数的定义 24 2.8 历史 24 2.9 细节 25 2.9.1 特化 25 2.9.2 实例化 26 2.9.3 多态 26 2.10 练习 27 第3章 深入探索元函数 30 3.1 量纲分析 30 3.1.1 量纲的表示 31 3.1.2 物理量的表示 33 3.1.3 实现加法和减法 33 3.1.4 实现乘法 34 3.1.5 实现除法 37 3.2 高阶元函数 39 3.3 处理占位符 40 3.3.1 lambda元函数 41 3.3.2 apply元函数 42 3.4 lambda的其他能力 43 3.4.1 偏元函数应用 43 3.4.2 元函数复合 43 3.5 Lambda的细节 43 3.5.1 占位符 43 3.5.2 占位符表达式的定义 45 3.5.3 Lambda和非元函数模板 45 3.5.4 “懒惰”的重要性 46 3.6 细节 46 3.7 练习 48 第4章 整型外覆器和操作 49 4.1 布尔外覆器和操作 49 4.1.1 类型选择 49 4.1.2 缓式类型选择 51 4.1.3 逻辑运算符 53 4.2 整数外覆器和运算 55 4.2.1 整型运算符 57 4.2.2 _c整型速记法 58 4.3 练习 59 第5章 序列与迭代器 61 5.1 Concepts 61 5.2 序列和算法 62 5.3 迭代器 62 5.4 迭代器Concepts 63 5.4.1 前向迭代器 63 5.4.2 双向迭代器 64 5.4.3 随机访问迭代器 65 5.5 序列Concepts 66 5.5.1 序列遍历Concepts 66 5.5.2 可扩展性 68 5.5.3 关联式序列 68 5.5.4 可扩展的关联式序列 69 5.6 序列相等性 71 5.7 固有的序列操作 71 5.8 序列类 72 5.8.1 list 72 5.8.2 vector 73 5.8.3 deque 74 5.8.4 range_c 74 5.8.5 map 74 5.8.6 set 75 5.8.7 iterator_range 75 5.9 整型序列外覆器 75 5.10 序列派生 76 5.11 编写你自己的序列 77 5.11.1 构建tiny序列 77 5.11.2 迭代器的表示 78 5.11.3 为tiny实现at 79 5.11.4 完成tiny_iterator的实现 81 5.11.5 begin和end 82 5.11.6 加入扩充性 85 5.12 细节 86 5.13 练习 87 第6章 算法 90 6.1 算法、惯用法、复用和抽象 90 6.2 MPL中的算法 92 6.3 插入器 93 6.4 基础序列算法 95 6.5 查询算法 97 6.6 序列构建算法 98 6.7 编写你自己的算法 100 6.8 细节 101 6.9 练习 102 第7章 视图与迭代器适配器 104 7.1 一些例子 104 7.1.1 对从序列元素计算出来的值进行比较 104 7.1.2 联合多个序列 107 7.1.3 避免不必要的计算 108 7.1.4 选择性的元素处理 109 7.2 视图Concept 109 7.3 迭代器适配器 110 7.4 编写你自己的视图 110 7.5 历史 112 7.6 练习 112 第8章 诊断 114 8.1 调试错误 114 8.1.1 实例化回溯 114 8.1.2 错误消息格式化怪癖 116 8.2 使用工具进行诊断分析 123 8.2.1 听取他者的意见 124 8.2.2 使用导航助手 124 8.2.3 清理场面 124 8.3 有目的的诊断消息生成 126 8.3.1 静态断言 128 8.3.2 MPL静态断言 129 8.3.3 类型打印 136 8.4 历史 138 8.5 细节 138 8.6 练习 139 第9章 跨越编译期和运行期边界 140 9.1 for_each 140 9.1.1 类型打印 140 9.1.2 类型探访 142 9.2 实现选择 143 9.2.1 if语句 143 9.2.2 类模板特化 144 9.2.3 标签分派 144 9.3 对象生成器 147 9.4 结构选择 149 9.5 类复合 153 9.6 (成员)函数指针作为模板实参 156 9.7 类型擦除 157 9.7.1 一个例子 158 9.7.2 一般化 159 9.7.3 “手工”类型擦除 160 9.7.4 自动类型擦除 161 9.7.5 保持接口 162 9.8 奇特的递归模板模式 164 9.8.1 生成函数 164 9.8.2 管理重载决议 166 9.9 显式管理重载集 168 9.10 sizeof技巧 171 9.11 总结 172 9.12 练习 172 第10章 领域特定的嵌入式语言 173 10.1 一个小型语言 173 10.2 路漫漫其修远兮 175 10.2.1 Make工具语言 175 10.2.2 巴科斯-诺尔模式 177 10.2.3 YACC 179 10.2.4 DSL摘要 181 10.3 DSL 182 10.4 C++用作宿主语言 184 10.5 Blitz++和表达式模板 186 10.5.1 问题 186 10.5.2 表达式模板 187 10.5.3 更多的Blitz++魔法 190 10.6 通用DSEL 191 10.6.1 具名参数 191 10.6.2 构建匿名函数 193 10.7 Boost Spirit程序库 199 10.7.1 闭包 201 10.7.2 子规则 202 10.8 总结 205 10.9 练习 205 第11章 DSEL设计演练 206 11.1 有限状态机 206 11.1.1 领域抽象 206 11.1.2 符号 207 11.2 框架设计目标 208 11.3 框架接口基础 209 11.4 选择一个DSL 210 11.4.1 转换表 210 11.4.2 组装成一个整体 213 11.5 实现 216 11.6 分析 221 11.7 语言方向 223 11.8 练习 223 附录A 预处理元编程简介 226 附录B typename和template关键字 247 附录C 编译期性能 258 附录D MPL可移植性摘要 274 参考文献 275 |
随便看 |
|
霍普软件下载网电子书栏目提供海量电子书在线免费阅读及下载。