《C++设计新思维》Command设计模式读后感
原文内容提领:
本书第5章标题为泛化仿函数,我认为本章真正讲述的内容可以总结出一句话!
如何利用C++老标准实现C++11新标准类似std::function提供的功能。
std::function简介:
分析std::function源码可知,std::function大量利用新标准的特性,变长参数模板,完美转发等。
C++中可调用体:
C++中的可调用体,现在可以补充一下
1.C-like function
2.C-like pointer to function
3.reference to function
4.function object
5.pointer to member function
6.ctor
7.C++11 lambda
文章中的Functor:
对于上述所列的任何一项,你可以在右侧添加一对圆括号(),并在里头放入一组合适的参数,用以执行某个处理动作。
之后,讲述的Functor即是对以1-6可调用形式的封装。Functor可以传递,对于对于不同的调用体,但拥有相同的调用形式,提供统一的类型。
真正的读后感:
作者在书中105页感叹,“数量可变的template参数”根本不存在。(C++11变长参数模板)
虽说巧妇难为无米之炊,但是真正的能工巧匠并面对生产工具的限制也不会妥协,本书作者即是如此。
书中122页,讨论转发函数的成本,在尾注中提到“引用折叠”,C++之父 Bjarne Stroustrup 提交报告,允许使用reference to reference。
(C++11 引用折叠,完美转发std::forward)
什么是精通一门语言?
1.认识到语言的限制,以及如何利用编程技艺消除这种限制。
2.能够预知,断言,甚至影响语言未来的发展。
我听闻一个故事,很久以前一位教授数据结构的老师,有一天他讲完链表后,底下有同学提问:“老师,我使用VB语言,VB没有指针,没法实现链表!”。
众所周知,没有指针也可以实现链表,静态(数组)链表就是证明。这位同学知道语言的限制,但没有探索如何突破这个限制,《C++设计新思维》作者Andrei运用typelist技术突破了模板参数不可变的限制,并使得泛型编程与设计模式有机融合。
取其上者得乎其中,诸位我们的目标是精通一门语言,向Andrei学习。
《C++设计新思维》Command设计模式读后感的更多相关文章
- 《C++设计新思维》勘误,附C++14新解法
勘误: 原书(中文版)3.13节,65-69页中GenScatterHierarchy以及FieldHelper均存在问题,当TypeList中类型有重复时,无法通过编译(原因在于“二义性基类”). ...
- c++学习书籍推荐《C++设计新思维》下载
百度云及其他网盘下载地址:点我 译序by 侯捷 i 译序by 於春景 iii 目录 v 序言by scott meyers xi 序言by john vlissides xv 前言 xvii 致谢 x ...
- 读-《c++设计新思维-泛型编程与设计模式之应用》经典记录(英文书名:《modern c++ design》)
1.以设计为目标的程序库都必须帮助使用者完毕静止的设计.以实现使用者自己的constraints,而不是实现预先定义好的constraints. 2.Anything that can be done ...
- C++设计新思维的traits和policy
http://blog.csdn.net/zhoudaxia/article/details/4486487 这篇博客讲得挺清楚的,本来想自己写写看总结下的,不过看了下这个文章已经写得很清楚了,倒没有 ...
- PowerBuilder编程新思维3:适配(三层架构与GraphQL)
PowerBuilder编程新思维3:适配(三层架构与GraphQL) PB在富客户端时代,是一线开发工具.随着网络发展,主流架构演进到三层架构的时代,PB拿不出有力的三层架构,已经明显力不从心,市场 ...
- PowerBuilder编程新思维2:嵌入(Thread多线程)
PowerBuilder编程新思维2:嵌入(Thread多线程) 在PB中使用多线程,在网上有大量的文章介绍.不过深入研究并试着给出更易用的模型的,目前还只有"路人甲cw"的一篇& ...
- atitit.TokenService v3 qb1 token服务模块的设计 新特性.docx
atitit.TokenService v3 qb1 token服务模块的设计 新特性.docx 1.1. V3 新特性1 1.2. V2 新特性1 2. Token的归类1 3. Token的用途 ...
- Command设计模式
1 意图:将一个请求封装为一个对象,可以用不同的请求对客户进行参数化: 对请求排队或记录请求日志,以及支持可撤销的操作. 2 别名:Action.Transaction 3 动机:把请求变成一个对象. ...
- PowerBuilder编程新思维5:包装(界面美化与WebUI+React)
PowerBuilder编程新思维5:包装(界面美化与WebUI+React) 前一节,分析了三种界面美化方案,都是控件级的美化.今天再来分析一下窗口级的美化.上一次讲的DirectUI,大家反响一般 ...
随机推荐
- 判断是否POST提交
if(strtolower($_SERVER['REQUEST_METHOD']) == 'post'){} //判断是否POST提交
- 使用属性Props完成一张卡片
一:我们先安装bootstrap,为了使我们的样式好看些 cnpm install bootstrap --save 二:我们在index.js中引入bootstap Import ‘bootst ...
- 实现一个div的拖拽效果
实现思路: 鼠标按下开始拖拽 记录摁下鼠标时的鼠标位置以及元素位置 拖动鼠标记下当前鼠标的位置 鼠标当前位置-摁下时鼠标位置= 鼠标移动距离 元素位置= 鼠标移动距离+鼠标摁下时元素的位置 class ...
- 读取本地json文件另一种方式
function getScenemapData(){ $.ajax({ url: "/js/currency.json", type: "GET" ...
- vue.js 使用记录(1)
1,for循环 <li @click="toService(type, index)" v-for="(type,index) in typeList" ...
- mac 下安装php7.1 redis
1.下载phpredis源文件 https://nodeload.github.com/nicolasff/phpredis/zip/master 下载后解压 2.执行命令 phpize 执行后执行 ...
- 双硬盘双系统win10+manjaro-kde搭建
电脑sdd+hdd双硬盘,默认win10装在了sdd分区,uefi+gpt引导.现在想要在hdd中划分出一个分区安装manjaro,并在开机多重引导. 1. 制作安装盘 先去下载最新的镜像,最好在国内 ...
- RedirectAttributes 之 IE8请求跳转失败
1.时间真快,一晃又快冬天了,下了第一场雪.雪花漫漫,堵车悠悠. 2.这次遇到这样一个问题,就是RedirectAttributes传递数据参数,如果参数数据过大,在IE8浏览器时候会跳转不过去.其实 ...
- 杂项(乌班图、flex的使用实例)
查看乌班图当前系统版本:lsb_release -a 转载于博客园:flex的使用实例
- 关于虚拟机linux网络的一个问题(基于cntos7)
刚刚开始学习搭建Linux集群,目前出现的比较麻烦的一个问题是Linux网络ip问题.其实网上好多出现类似问题的解答大部分说是因为克隆的问题,但实际情况先克隆产生的问题应该是很好排查的.所幸,有博主针 ...