Monday, October 18, 2010

Type Container of Meta-programming

1. boost::tuple

    本身不是为meta-programming而出现的,但是,tuple能包含任意个数据类型,并生成instance,成为融合编译时meta-programming和运行时programming的绝佳工具。

    tuple为元编程提供的工具有:

        element <N, Tuple>::type
        length < Tuple >::value

2. loki::Typelist

     一种类型容器,为元编程提供的方法有:
         Length <TypeList >
         TypeAt <TypeList, N >
         IndexOf <TypeList, T >
         Append <TypeList, T >
         Erase <TypeList, T >
         Replace <TypeList, T, U >

    为编译期到运行期提供映射的工具有:
         GenScatterHierarchy
         GenLinearHierarchy

3. boost::mpl::vector, list, etc.

    专为元编程提供的一套工具,在元编程领域实现了类似于STL container的语义。为元编程提供的方法有:

        begin<>, end<>, transform<>, insert<>...

    为编译期到运行期提供的映射的工具有:
         for_each<>

    总而言之,MPL库在编译期的元编程能力极其强大,但运行期的能力略显不足。

4. boost::fusion

    boost::tuple 和 boost::mpl的结合体,为编译期和运行期的元编程提供支持。并大量使用view来提高编译性能。

   
5. lmp::tuple

    自己使用的light-weight meta-programming toolkit. 与boost::tuple的最主要区别是:当N是一个无效值(比如-1)时,lmp::element< N, lmp::tuple >将返回lmp::null_type,而不是像boost::element< N, boost::tuple >那样由编译器报一个编译错误。

    lmp::tuple的好处是允许高阶的元编程,比如缺省处理类型。

No comments: