Abel'Blog

我干了什么?究竟拿了时间换了什么?

0%

c++metaprogramming

简介

模板编程的应用主要有两种:泛型编程 (generic programming) 和 元编程 (meta-programming)。前者注重于 通用概念 的抽象,设计通用的 类型 或 算法 (algorithm),不需要过于关心编译器如何生成具体的代码;而后者注重于设计模板推导时的 选择 (selection) 和 迭代 (iteration),通过模板技巧设计程序。[1]

元编程(template meta-programming),在许多现代C++和Boost程序组件里面使用了。如果不能理解这块的东西,将无法读懂很多代码。可以通过它操作产生程序的程序。元编程是工作在编译器级别的一种程序。和普通编程不相同,普通编程是在执行的时候,对变量计算、判断和赋值;元编程是泛型编程的子集。

元编程的基本 演算规则 (calculus rule) 有两种:编译时测试 (compile-time test) 和 编译时迭代 (compile-time iteration) [1],分别实现了 控制结构 (control structure) 中的 选择 (selection) 和 迭代 (iteration)。基于这两种基本的演算方法,可以完成更复杂的演算。

C++ 11 的 别名模板 提供了对模板中的类型的简记方法;
C++ 14 的 变量模板 提供了对模板中常量的简记方法;
C++ 17 的 constexpr-if 提供了 编译时测试 的新写法;
C++ 17 的 折叠表达式 降低了 编译时迭代 的编写难度。

通过实例来学习

c++

语法元素

元数据(meta data)

元函数(meta function)

参考