标签分类 热门分类
当前位置:首页 > 程序设计电子书 > C++编程电子书网盘下载
C++模板元编程 C++模板元编程
赖鹏煊

赖鹏煊 提供上传

资源
15
粉丝
18
喜欢
165
评论
6

    C++模板元编程 PDF 超清版

    C++编程电子书
    • 发布时间:

    给大家带来的一篇关于C++编程相关的电子书资源,介绍了关于C++、模板元、编程方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小24.03 MB,大卫 荣耀编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.7,更多相关的学习资源可以参阅 程序设计电子书C/C++视频、等栏目。

  • C++模板元编程 PDF 下载
  • 下载地址:https://pan.baidu.com/s/14BGZFsrA1lbqiSkVScYj2
  • 分享码:fa23
  • 本书清晰地揭示了现代C++*威力的使用手法,将实际的工具和技术交付普通程序员的手中。

    元编程是产生或操纵程序码的程序。自从泛型编程被引入C++中以来,程序员们已经发现用于当程序被编译时对其进行操纵的无数“tricks template”,这些tricks有效地消除了横亘在程序和元编程之间的藩篱。尽管C++专家们对这种能力的兴奋已经波及整个C++社区,然而它们的实际应用对于大多数程序员来说仍然是遥不可及。本书解释了何谓元编程以及如何*化地使用

    它,为你在自己的工作中有效地使用模板元编程提供了必备的基础。

    本书瞄准于任何熟悉标准模板库(Standard Template Library,STL)惯用法的程序员。C++高级用户会获得对既有工作新的洞察以及对元编程领域新的认知。那些已经学习了一些高级模板技术的中级程序员将会明白这些tricks是从哪儿适合大画面的。并将获得有秩序地使用它们所需的概念基础。对于那些已经嗅到元编程味道但对其仍然感到神秘的程序员而言,最终将获得对元编程如何工作、何时工作以及为何工作的清晰的理解。无论如何,所有读者都将获得一个可以自由支配的、威力空前的新工具:Boost MetaDroaramming Library。
    内容简介
    《C++模板元编程》是关于C++模板元编程的著作。《C++模板元编程》主要介绍Traits和类型操纵、深入探索元函数、整型外覆器和操作、序列与迭代器、算法、视图与迭代器适配器、诊断、跨越编译期和运行期边界、领域特定的嵌入式语言、DSEL设计演练,另外附录部分还介绍了预处理元编程概述、typename和template关键字。《C++模板元编程》通过理论联系实践,深入讲解了C++高级编程技术。

    《C++模板元编程》适合中、高阶C++程序员等参考。

    附赠光盘内容包含所有Boost C++程序库:Boost Metaprog ramming Library及其参考文件,还包含所有随书代码示例以及大量的补充材料。

    目录

    • 译者序
    • 序言
    • 前言
    • 致谢
    • 第1章 概述
    • 1.1 起步走
    • 1.2 元程序的概念
    • 1.3 在宿主语言中进行元编程
    • 1.4 在C++中进行元编程
    • 1.4.1 数值计算
    • 1.4.2 类型计算
    • 1.5 为何进行元编程
    • 1.5.1 替代方案1:运行期计算
    • 1.5.2 替代方案2:用户分析
    • 1.5.3 为何进行C++元编程
    • 1.6 何时进行元编程
    • 1.7 为何需要元编程程序库
    • 第2章 Traits和类型操纵
    • 2.1 类型关联
    • 2.1.1 采用一种直接的方式
    • 2.1.2 采用一种迂回方式
    • 2.1.3 寻找一个捷径
    • 2.2 元函数
    • 2.3 数值元函数
    • 23.4 在编译期作出选择
    • 2.4.1 进一步讨论iter_swap
    • 2.4.2 美中不足
    • 2.4.3 另一个美中不足
    • 2.4.4 “美中不足”之外覆器
    • 2.5 Boost Type Traits程序库概览
    • 2.5.1 一般知识
    • 2.5.2 主类型归类(Primary Type Categorization)
    • 2.5.3 次类型归类(Secondary Type Categorization)
    • 2.5.4 类型属性
    • 2.5.5 类型之间的关系
    • 2.5.6 类型转化
    • 2.6 无参元函数
    • 2.7 元函数的定义
    • 2.8 历史
    • 2.9 细节
    • 2.9.1 特化
    • 2.9.2 实例化
    • 2.9.3 多态
    • 2.10练习
    • 第3章 深入探索元函数
    • 3.1 量纲分析
    • 3.1.1 量纲的表示
    • 3.1.2 物理量的表示
    • 3.1.3 实现加法和减法
    • 3.1.4 实现乘法
    • 3.1.5 实现除法
    • 3.2 高阶元函数
    • 3.3 处理占位符
    • 3.3.1 lambda元函数
    • 3.3.2 apply元函数
    • 3.4 lambda的其他能力
    • 3.4.1 偏元函数应用
    • 3.4.2 元函数复合
    • 3.5 Lambda的细节
    • 3.5.1 占位符
    • 3.5.2 占位符表达式的定义
    • 3.5.3 Lambda和非元函数模板
    • 3.5.4 “懒惰”的重要性
    • 3.6 细节
    • 3.7 练习
    • 第4章 整型外覆器和操作
    • 4.1 布尔外覆器和操作
    • 4.1.1 类型选择
    • 4.1.2 缓式类型选择
    • 4.1.3 逻辑运算符
    • 4.2 整数外覆器和运算
    • 4.2.1 整型运算符
    • 4.2.2 _c整型速记法
    • 4.3 练习
    • 第5章 序列与迭代器
    • 5.1 Concepts
    • 5.2 序列和算法
    • 5.3 迭代器
    • 5.4 迭代器Concepts
    • 5.4.1 前向迭代器
    • 5.4.2 双向迭代器
    • 5.4.3 随机访问迭代器
    • 5.5 序列Concepts
    • 5.5.1 序列遍历Concepts
    • 5.5.2 可扩展性
    • 5.5.3 关联式序列
    • 5.5.4 可扩展的关联式序列
    • 5.6 序列相等性
    • 5.7 固有的序列操作
    • 5.8 序列类
    • 5.8.1 list
    • 5.8.2 vector
    • 5.8.3 deque
    • 5.8.4 range_c
    • 5.8.5 map
    • 5.8.6 set
    • 5.8.7 iterator_range
    • 5.9 整型序列外覆器
    • 5.10 序列派生
    • 5.11 编写你自己的序列
    • 5.11.1 构建tiny序列
    • 5.11.2 迭代器的表示
    • 5.11.3 为tiny实现at.
    • 5.11.4 完成tiny_iterator的实现
    • 5.11.5 begin和end
    • 5.11.6 加入扩充性
    • 5.12 细节
    • 5.13 练习
    • 第6章 算法
    • 6.1 算法、惯用法、复用和抽象
    • 6.2 MPL的算法
    • 6.3 插入器
    • 6.4 基础序列算法
    • 6.5 查询算法
    • 6.6 序列构建算法
    • 6.7 编写你自己的算法
    • 6.8 细节
    • 6.9 练习
    • 第7章 视图与迭代器适配器
    • 7.1 一些例子
    • 7.1.1 对从序列元素计算出来的值进行比较
    • 7.1.2 联合多个序列
    • 7.1.3 避免不必要的计算
    • 7.1.4 选择性的元素处理
    • 7.2 视图Concept
    • 7.3 迭代器适配器
    • 7.4 编写你自己的视图
    • 7.5 历史
    • 7.6 练习
    • 第8章 诊断
    • 8.1 调试错误
    • 8.1.1 实例化回溯
    • 8.1.2 错误消息格式化怪癖
    • 8.2 使用工具进行诊断分析
    • 8.2.1 听取他者的意见
    • 8.2.2 使用导航助手
    • 8.2.3 清理场面
    • 8.3 有目的的诊断消息生成
    • 8.3.1 静态断言
    • 8.3.2 MPL静态断言
    • 8.3.3 类型打印
    • 8.4 历史
    • 8.5 细节
    • 8.6 练习
    • 第9章 跨越编译期和运行期边界
    • 9.1 forl_each
    • 9.1.1 类型打印
    • 9.1.2 类型探访
    • 9.2 实现选择
    • 9.2.1 if语句
    • 9.2.2 类模板特化
    • 9.2.3 标签分派
    • 9.3 对象生成器
    • 9.4 结构选择
    • 9.5 类复合
    • 9.6 (成员)函数指针作为模板实参
    • 9.7 类型擦除
    • 9.7.1 一个例子
    • 9.7.2 一般化
    • 9.7.3 “手工”类型擦除
    • 9.7.4 自动类型擦除
    • 9.7.5 保持接口
    • 9.8 奇特的递归模板模式
    • 9.8.1 生成函数
    • 9.8.2 管理重载决议
    • 9.9 显式管理重载集
    • 9.10 sizeof技巧
    • 9.11 总结
    • 9.12 练习
    • 第10章 领域特定的嵌入式语言
    • 10.1 一个小型语言
    • 10.2 路漫漫其修远兮
    • 10.2.1 Make工具语言
    • 10.2.2 巴科斯一诺尔模式
    • 10.2.3 YACC
    • 10.2.4 DSL摘要
    • 10.3 DSL
    • 10.4 C++用作宿主语言
    • 10.5 Blitz++和表达式模板
    • 10.5.1 问题
    • 10.5.2 表达式模板
    • 10.5.3 更多的Blitz++魔法
    • 10.6 通用DSEL
    • 10.6.1 具名参数
    • 10.6.2 构建匿名函数
    • 10.7 BoostSpirit程序库
    • 10.7.1 闭包
    • 10.7.2 子规则
    • 10.8 总结
    • 10.9 练习
    • 第11章 DSEL设计演练
    • 11.1 有限状态机
    • 11.1.1 领域抽象
    • 11.1.2 符号
    • 11.2 框架设计目标
    • 11.3 框架接口基础
    • 11.4 选择一个DSL
    • 11.4.1 转换表
    • 11.4.2 组装成一个整体
    • 11.5 实现
    • 11.6 分析
    • 11.7 语言方向
    • 11.8 练习
    • 附录A 预处理元编程简介
    • 附录B typename和template关键字
    • 附录C 编译期性能
    • 附录D MPL可移植性摘要
    • 参考文献

    上一篇:Effective STL中文版:50条有效使用STL的经验  下一篇:跨平台桌面应用开发:基于Electron与NW.js

    展开 +

    收起 -

     
    C++编程 相关电子书
    关于C++编程的学习笔记
    网友NO.764203

    如何正确使用Nodejs 的 c++ module 链接到 OpenSSL

    事情的起因是这样的, 因为某些原因, 最近在写 Nodejs 的 c++ module, 然后在js这边调用。 网络通信自然离不开ssl, 于是需要链接到Openssl的库。 我们本来的期望是,需要用户安装有Openssl的运行库, 然后我们的c++ module 动态链接到Openssl的so库上来运行。 起初一切看起来还不错,直到我们发现这个openssl的函数不能工作: PKCS7_sign() PKCS7_sign ( ) 我们发现: 如果我们的 c++ 模块与Openssl库动态链接的话, 编译都没问题. 但是运行会出现: PKCS7_sign 符号无法找到的错误. 如果我们的 c++ 模块与Openssl库静态链接的话, 编译也没问题, 但是运行时,调用这个函数的地方没有效果, 这个函数返回值是 0. 按照文档表示出现错误, 但是用 Openssl的函数 ERR_get_error 获取错误码也是0. 表示没有错误码. 在linux上是这样, 那在Mac上呢? 用Mac试了一下, 发现Mac没有问题. 于是,想到这可能是Nodejs的一个bug. 然后就去 Nodejs 给它报了一个bug: [https://github.com/joyent/node/issues/8026][1] 同时, google上搜索了 nodejs linking to openssl 类似的关键字. 找到这样几篇文章: https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL https://github.com/joyent/node/issues/3915 http://serverfault.com/questions/338092/how-can-i-build-node-js-using-static-libssl-and-crypto-libraries https://github.com/robhawkes/node-extension/issues/1 通过搜索, 我们发现……

    网友NO.544323

    Linux下python与C++使用dlib实现人脸检测

    python 与 C++ dlib人脸检测结果对比,供大家参考,具体内容如下 说明: 由于项目需求发现Linux下c++使用dlib进行人脸检测和python使用dlib检测,得到的结果出入比较大,于是写了测试用例,发现影响结果的原因有但不限于: 1.dlib版本不同(影响不大,几个像素的差别) 2.dlib 人脸检测中detector()第二个参数的设置测试结果如下: python PDlib.py: # -*- coding: utf-8 -*-import sysimport cv2 import dlibfrom skimage import iodetector = dlib.get_frontal_face_detector()win = dlib.image_window()for f in sys.argv[1:]: img = io.imread(f) dets = detector(img,1) #使用detector进行人脸检测 for i, d in enumerate(dets): x = d.left() y = d.top() w = d.right() h = d.bottom() cv2.rectangle(img, (x, y), (w, h), (0, 255, 0)) print("({},{},{},{})".format( x, y, (w-x), (h-y))) win.set_image(img) io.imsave('./P_Dlib_test.jpg',img) #等待点击 dlib.hit_enter_to_continue() C++ CDlib.cpp: #include dlib/image_processing/frontal_face_detector.h#include dlib/opencv.h#include "opencv2/opencv.hpp"#include iostreamusing namespace dlib;using namespace std;cv::Rect Detect(cv::Mat im){ cv::Rect R; frontal_face_detector detector = get_frontal_face_detector(); array2dbgr_pixel img; assign_image(img, cv_imageuchar(im)); std::vectorrectangle dets = detector(img);//检测人脸 //查找最大脸 if (dets.size() != 0) { int Max = 0; int area = 0; for (unsigned long t = 0; t dets.size(); ++t) { if (area det……

    网友NO.788845

    解决安装mysqlclient的时候出现Microsoft Visual C++ 14.0 is required报错

    在安装mysqlclient的时候出现了以下报错: 解决办法: 1.到提示网址:https://visualstudio.microsoft.com/download/里面下载对应VC++版本安装后继续安装mysqlclient。但是本人没有找到对应文件,故不再过多赘述,这里说下第二种方法。 2.1到https://www.lfd.uci.edu/~gohlke/pythonlibs/找到mysqlclient编译包下载对应版本: 注:前面代表python版本,后面的win代表Python位数。 2.2进入到文件放置的文件夹,比如我是将下载好的文件放在了c:\envs\django1-env并安装: 2.3提示安装成功,问题解决 总结 以上所述是小编给大家介绍的解决安装mysqlclient的时候出现Microsoft Visual C++ 14.0 is required报错,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持! ……

    网友NO.282889

    Go语言对比 C++引用传参

    这篇文章主要介绍了Go 到底有没有引用传参(对比 C++ ),需要的朋友可以参考下 C++ 中三种参数传递方式 值传递: 最常见的一种传参方式,函数的形参是实参的拷贝,函数中改变形参不会影响到函数外部的形参。一般是函数内部修改参数而又不希望影响到调用者的时候会采用值传递。 指针传递 形参是指向实参地址的一个指针,顾名思义,在函数中对形参指向的内容操作,实参本身会被修改。 引用传递 在 C++ 中,引用是变量的别名,实际上是同一个东西,在内存中也存在同一个地址。换句话说,不管在哪里对引用操作,都相当直接操作被引用的变量。 下面看 demo: #include iostream//值传递void func1(int a) { std::cout 值传递,变量地址: a , 变量值: a std::endl; a ++ ;}//指针传递void func2 (int* a) { std::cout 指针传递,变量地址: a , 变量值: *a std::endl; *a = *a + 1;}//引用传递void func3 (int a) { std::cout 指针传递,变量地址: a , 变量值: a std::endl; a ++;}int main() { int a = 5; std::cout 变量实际地址: a , 变量值: a std::endl; func1(a); std::cout 值传递操作后,变量值: a std::endl; std::cout 变量实际地址: a , 变量值: a std::endl; func2(a); std::cout 指针传递操作后,变量值: a std::endl; std::cout 变量实际地址: a , 变量值: a std::endl; func3(a); std::cout 引用传递操作后,变量值……

    Copyright 2018-2020 xz577.com 码农之家

    电子书资源由网友、会员提供上传,本站记录提供者的基本信息及资源来路

    鸣谢: “ 码小辫 ” 公众号提供回调API服务、“ 脚本CDN ”提供网站加速(本站寻求更多赞助支持)

    版权投诉 / 书籍推广 / 赞助:520161757@qq.com

    上传资源(网友、会员均可提供)

    查看最新会员资料及资源信息