C++模板元编程(递归--分解)

最近一直在看STL和Boost,源码里边好多涉及到模板元编程技术,简单了解一下,备忘(Boost Python中的涉及模板元的部分重点关注一下)。

范例引入

复制代码
// 主模板
template<int N>
struct Fib
{enum { Result = Fib<N-1>::Result + Fib<N-2>::Result };
};// 完全特化版
template <>
struct Fib<1>
{enum { Result = 1 };
};// 完全特化版
template <>
struct Fib<0>
{enum { Result = 0 };
};int main()
{int i = Fib<10>::Result;// std::cout << i << std::endl;
} 
复制代码

我们将通过一个实例进行讲解,来看一下编译器实际的运作过程。我们定义了一个包含两个元素:int以及long的TypeList。

typedef TYPELIST_2(int, long) MyTypeList;

此时,编译器会根据TypeList的定义方式产生如下的类型定义结果:

struct TypeList<long, NullType>

{

typedef long H;

typedef NullType T;