C++设计新思维的traits和policy
http://blog.csdn.net/zhoudaxia/article/details/4486487
这篇博客讲得挺清楚的,本来想自己写写看总结下的,不过看了下这个文章已经写得很清楚了,倒没有必要了,总得来说,要了解traits和policy,需要了解下面这三个点
1.什么是特化,什么是偏特化
顾名思义,特化就是针对一些特殊的类型进行变化,毕竟C++的模板是什么类型都能放进去的,但是有些类型就是比较独特,需要做特别的处理,这个就有了特化和偏特化,在这篇博客中作者特化了AccumulationTraits的int和char
2.利用typedef来抽象数据类型
当要把两个类中的不同的类型统一成一种类型要怎么办,就是typedef,在这篇博客中,作者讲int和chat全部typedef了acct,当然,所谓的typedef就是取个别名
3.typename除了定义模板类型,还能做什么用??
在我们编写模板代码的时候,我们经常会这样
template <typename T1,typename T2>
于是大部分人就认为typename的作用只是告诉编译器这个是模板的类型而已,其实typename还有一个隐藏功能,就是告诉编译器这个是一个type的name,而不是一个静态变量,想想看,我们在访问一个类的静态变量的时候,语法是这样的:
class_name::value_name;那么,如果我们的value_name是一个通过typedef定义的名称呢??编译器怎么知道??
这个时候就需要typename来告诉编译器了,typename class_name::value_name,这样编译器就会知道这个value_name是一个type的name,而不是一个static type了
不管是traits还是policy的模式,都是通过规定一个统一的接口或者类型来让一个函数或者类调用,当然所谓的统一跟纯虚函数一样都是通过名称来限制用户的行为,起码你需要写出这几个接口,不然编译就无法通过,不同的是,虚函数无法统一数据类型,而且虚函数是运行时确定的,而模板则是在编译时确定的
C++设计新思维的traits和policy的更多相关文章
- 《C++设计新思维》Command设计模式读后感
原文内容提领: 本书第5章标题为泛化仿函数,我认为本章真正讲述的内容可以总结出一句话! 如何利用C++老标准实现C++11新标准类似std::function提供的功能. std::function简 ...
- 《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 ...
- 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的用途 ...
- PowerBuilder编程新思维5:包装(界面美化与WebUI+React)
PowerBuilder编程新思维5:包装(界面美化与WebUI+React) 前一节,分析了三种界面美化方案,都是控件级的美化.今天再来分析一下窗口级的美化.上一次讲的DirectUI,大家反响一般 ...
- PowerBuilder编程新思维4:钩挂(界面美化与DirectUI)
<第二部分 Outside> PowerBuilder编程新思维4:钩挂(界面美化与DirectUI) PB的界面由于其封闭性,一直以来都是最大的弱项.自PB9.0开放了PBNI接口后,开 ...
随机推荐
- crontab 安装 和一些 简单的命令
crontab命 令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供 之后读取和执行.通常,crontab ...
- ZOJ 1048 Financial Management
原题链接 题目大意:给出12个月的收入,求一个平均值. 解法:没什么好说的,就是一个除法. 参考代码: #include<stdio.h> int main(){ int i; float ...
- 浅谈jQuery中setInterval()方法
定义和用法: setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口 ...
- Spring事务管理 -- 挺好
Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring的事务管理分为声明式跟编程式.声明式就是在Spring的配置文件中进行相关配置 ...
- POJ 3233 Matrix Power Series 矩阵快速幂
设S[k] = A + A^2 +````+A^k. 设矩阵T = A[1] 0 E E 这里的E为n*n单位方阵,0为n*n方阵 令A[k] = A ^ k 矩阵B[k] = A[k+1] S[k] ...
- 课堂所讲整理:HTML--8Window.document对象
1.Window.document对象 一.找到元素: docunment.getElementById("id"):根据id找,最多找一个: var a =docunmen ...
- ThinkPHP使用SQL函数进行查询
//SQL函数查询 $products=$pro->where(array("FIND_IN_SET('".$type."',type)",'num'=& ...
- [hdu 4416]Good Article Good sentence
最近几天一直在做有关后缀自动机的题目 感觉似乎对后缀自动机越来越了解了呢!喵~ 这题还是让我受益颇多的,首先搞一个后缀自动机是妥妥的了 可是搞完之后呢? 我们来观察 step 这个变量,每个节点的 s ...
- eclipse adt 项目依赖,使用git上的项目
从git下载的android工程不能直接导入eclipse,有的项目要依赖这个项目,怎么办呢 好像只能新建一个android项目,然后把libs,res,src,AndroidManifest.xml ...
- Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker)
1. Mesos简介 1.1 Mesos Apache Mesos 是一个分布式系统的管理软件,对集群的资源进行分配和管理. Mesos主要由以下几部分组成: Master: 管理各Slave节点 S ...