1.2 type_traits述
操作的数据,它是元编程的基础。
元数据都是不可变的,不能够就 地 修 改 , 最 常 见 的 元 数 据 是 整 数 和 C++ 的类型
(type)。
对于整数大家都很熟悉,普通程序在运行时也可以很容易地处理,但在模板元编程中
的元数据更多的是以类型(type)的面目出现。这些元数据不是普通的运行时变量,而是
如 int、double、class(非模板类)这样的抽象数据类型——这是模板元编程与普通运
行时编程的一个最根本的不同点,也是元编程的威力所在(类型的计算)和令初学者感到最
困惑的地方。
如果对元数据 再 进 行 细 分归 类,则元数据又可 以 分 成整数元 数 据 、值 型元 数 据
( int 、 double 等 POD 值 类 型 ) 、 函 数 元 数 据 ( 函 数 类 型 ) 、 类 元 数 据
(class、struct 等用户自定义类型)等等。为了更明确地表述元数据的概念,本书后面
的“元数据”一词特指非整数的类型元数据。
使用 typedef 关键字可以任意定义(声明)元数据,很像运行时的变量定义语句,
例如:
//元数据 meta_data1,值为 int
typedef int meta_data1;
//元数据 meta_data2,值为 vector<float>
typedef std::vector<float> meta_data2;
1.1.2 元函数
元函数(meta function)是模板元编程中用于操作处理元数据的“构件”,可以在编
译期被“调用”,因为其功能和形式类似运行时的函数而得名,是元编程中最重要的构件。
元函数实际上表现为 C++中的一个类或者模板类,它的通常形式是:
template<typename arg1, typename arg2,...> //元函数参数列表
struct meta_function //元函数名
{
typedef some-define type; //元函数返回的元数据
static int const value = some-int; //元函数返回的整数
}; //使用分号结束元函数的定义
编写元函数就像是编写一个普通的运行时函数,但形式上却是一个模板类:
函数参数列表圆括号()变成了模板列表声明的尖括号<>,函数的形参变成了模板参数
Boost 程序库探秘——深度解析 C++准标准库