动态多态与静态多态

动态多态:允许我们通过单个基类指针或引用处理多个派生类型的对象. 模板元编程中强调静态多态,允许不同类型的对象以同样的方式被操纵,只要它们支持某种共通的语法即可.

动态多态,连同"延迟绑定"或"运行期派发",是面向对象程序的关键特性.静态多态(也称参数化多态),是泛型编程的本质要素.

在面向对象的编程文献中将一个带有大量成员的类称作blob.类的成员彼此"耦合",因为它们必须被声明在一起.为了避免耦合并提高模块化程度,应该避免使用这种反模式.替代

方式是采用独立的元函数来定义单独的traits

元数据:可以被C++编译期系统操纵的"值"可以被认为是元数据.在模板元编程中,两种最常见的数据是类型和整数(包括bool)常量. C++的编译期部分通常被称为"纯函数式语言"

,因为元数据是可变的并且元函数不可以有任何副作用.

多态:由于C++模板并非生来就多态地处理不同种类的元数据,因此MPL遵从使用type wrapper来包装非类型元数据的约定.尤其是,数值型元数据被表示为一个类型,该类型具有一个名为::value的

嵌套数值常量成员

  元函数

  数值型元函数

  无参元函数:一般是作为元函数特化,解决基础数据类型的问题

  Traits:一种通过类模板特化在小片元数据之间建立关联的技术. Traits惯用法的一个关键特性是它是非侵入性的:我们可以在不修改被关联项自身的前提下,建立一个新的映射.MPL元函数可以看做

traits的一个特例,它们对于任何输入都只有一个结果值.

变长模板:

  一般讲的都是变长类型模板参数,这里是一个变长非类型模板参数的例子,基本办法还是一样的,就是取出一个,然后不断特化,直到最后剩一个模板参数

#include<cstdio>
template<int...A> struct container{
void display(){printf("YIKES\n");}
}; template<int B, int ...C> struct container<B, C...>{
void display(){
printf("spec %d\n", B);
container<C...> test;
test.display();
}
}; template<int C> struct container<C>{
void display(){
printf("spec %d\n", C);
}
};

metaprogramming笔记的更多相关文章

  1. IceFig阅读笔记

    嗯:就是这里了 http://research.worksap.com/research/icefig/ 一下阅读笔记: 嗯,时间有限,他们提供的又茫茫多,所以 就找出来了 几个 单独聊聊吧. 其他语 ...

  2. 代码的未来读书笔记&lt;二&gt;

    代码的未来读书笔记<二> 3.1语言的设计 对Ruby JavaScript Java Go 从服务端client以及静态动态这2个角度进行了对照. 这四种语言因为不同的设计方针,产生了不 ...

  3. C++标准库第二版笔记 2.1

    C++标准库第二版笔记 2.1 1 Range-Based for 循环 for ( decl : coll ) { statements; } // collaborate 类似C# foreach ...

  4. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  7. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  8. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  9. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

随机推荐

  1. ajax获取数据库中数据

    xhr=new XMLHttpRequest(); var url="要获取数据的地方"; xhr.open('post',url,true); POST请求头(get就不用写这个 ...

  2. canvas drawImage异步特性

    先看代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  3. Qt之QPauseAnimation

    简述 QPauseAnimation类为QSequentialAnimationGroup提供了一个暂停. 如果你想为QSequentialAnimationGroup动画之间添加延迟,可以插入一个Q ...

  4. wxpython颜色选择

    Color Code Color Name Color #000000 BLACK   #0000FF BLUE   #007FFF SLATE BLUE   #00FF00 GREEN   #00F ...

  5. C++编程中const和#define的区别

    (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用.(2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有具 ...

  6. DataTable常用操作

    添加列和行的三种方法(转载) 原文地址:http://www.cnblogs.com/jRoger/articles/1887581.html DataTable tblDatas =new Data ...

  7. hat linux下vnc的安装

    1.在系统文件下找到vnc的rpm包(检测是否安装vnc) 系统文件寻找方法 进入到根目录(可通过pwd确认当前目录,/则表示根目录) 根目录下有个一个media,进入此目录 media目录下有个一个 ...

  8. 452. Minimum Number of Arrows to Burst Balloons——排序+贪心算法

    There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...

  9. ACTIVITI 源码研究之命令模式执行

    ACTIVITI 是一个优秀开源软件,通过阅读源码,我们不但可以了解工作流引擎执行的原理还可以增加个人的编码功力. ACTIVITI 所有执行过程都是采用命令模式进行执行. 本文主要描述流程引擎数据保 ...

  10. ZOJ 3329 One Person Game 概率DP 期望 难度:2

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754 本题分数为0的概率不确定,所以不能从0这端出发. 设E[i]为到达成功所 ...