Friday, August 20, 2010

boost::MPL - basic tools

1. lambda表达式:一种元数据(metadata)。有两种表达方式,一是普通的元数据类,二是占位符表达式(placeholder expressions)。占位符表达式的本质是把第n个元数据封装成一个元数据类。

    如"mpl::plus<_1, _2>",其中的"_1"大致相当于下边的定义:

    struct arg<1>
    {
        template <class A1, class A2 &gt;
        struct apply
        {
             typedef A1 type; // return first argument
        }
    };

    整个语句的含义相当于:
    struct Temp
    {
        template<typename Arg1, typename Arg2>
        struct apply {
            typedef mpl::plus<Arg1, Arg2> type;
        };
    }

2. mpl::vector, mpl::list, etc. 与std::vector, std::list有类似语义的元数据。但是,std容器中装的是变量,mpl容器中装的是类型。即:mpl可以对mpl容器中的类型进行运算,得到新的类型。

3.有价值的概念
   3.1 compile time to runtime mapping,
      用途: 从mataprogramming 转到
      工具:mpl::for_each<>, boost::fusion

   3.2 runtime to compile time mapping。
      用途:提供缓式计算,避免不必要的运行时开销,提高性能
      工具:参照blitz++

   3.3 闭包

   3.4 命名参数
      用途:函数接受大量参数时,简化参数传递
      工具:

No comments: