metaprogramming笔记
动态多态与静态多态
动态多态:允许我们通过单个基类指针或引用处理多个派生类型的对象. 模板元编程中强调静态多态,允许不同类型的对象以同样的方式被操纵,只要它们支持某种共通的语法即可.
动态多态,连同"延迟绑定"或"运行期派发",是面向对象程序的关键特性.静态多态(也称参数化多态),是泛型编程的本质要素.
在面向对象的编程文献中将一个带有大量成员的类称作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笔记的更多相关文章
- IceFig阅读笔记
嗯:就是这里了 http://research.worksap.com/research/icefig/ 一下阅读笔记: 嗯,时间有限,他们提供的又茫茫多,所以 就找出来了 几个 单独聊聊吧. 其他语 ...
- 代码的未来读书笔记<二>
代码的未来读书笔记<二> 3.1语言的设计 对Ruby JavaScript Java Go 从服务端client以及静态动态这2个角度进行了对照. 这四种语言因为不同的设计方针,产生了不 ...
- C++标准库第二版笔记 2.1
C++标准库第二版笔记 2.1 1 Range-Based for 循环 for ( decl : coll ) { statements; } // collaborate 类似C# foreach ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- NET Core-学习笔记(三)
这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...
随机推荐
- Python 练习 11
#!/usr/bin/python # -*- coding: UTF-8 -*- import math for i in range(10000): #转化为整型值 x = int(math.sq ...
- HTTP && socket
http://blog.csdn.net/zeng622peng/article/details/5546384 1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终 ...
- C#运算除法和求整
在C#与法中,“/”除后所得的值的类型,跟他的除数和被除数的类型有关.如: int a=4; int b=5 ...
- 一个.net mvc的例子
控制器 ( Controller) Product 下面功能主要根据多条件搜索产品的列表的功能 public ActionResult ProductList(string cityID, strin ...
- Java 之 I/O 系列 01 ——基础
Java 之 I/O 系列 目录 Java 之 I/O 系列 01 ——基础 Java 之 I/O 系列 02 ——序列化(一) Java 之 I/O 系列 02 ——序列化(二) 整理<疯狂j ...
- MD4C/CO46/MD04一个很棒的工单缺料分析
大家好~~~ 之前在MD04物料分析的时候,看到有订单预留,双击有个订单报告可以显示一个订单物料是否缺料清单 这个单独的工单分析可以在T-code:MD4C,CO46查看,如果只是单独的使用,那么这两 ...
- yii框架
Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.Yii是最有效率的PHP框架之一.Yii是创始人 ...
- vs2010 快捷键大全 (转)
VS2010版快捷键 Ctrl+E,D ----格式化全部代码 Ctrl+E,F ----格式化选中的代码 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O ...
- ANGULAR JS PROMISE使用
Promise是一种模式,以同步操作的流程形式来操作异步事件,避免了层层嵌套,可以链式操作异步事件. 我们知道,在编写javascript异步代码时,callback是最最简单的机制,可是用这种机制的 ...
- JS点击复制
<!DOCTYPE html><html><head> <script type="text/javascript"> functi ...