• C++元编程和Boost编程库 (C++ Metaprogramming and Boost MPL )中部


    C++元编程和Boost编程库 (C++ Metaprogramming and Boost MPL )中部 - hityct1的专栏 - 博客频道 - CSDN.NET


    C++元编程和Boost编程库 (C++ Metaprogramming and Boost MPL )中部


    分类:
    c++
    boost
    发表文章


    1406人阅读
    评论(0)
    收藏
    举报
    • Boost中的MPL库分析

           MPL(Meta-Programming Library)是由David AbrahamsAleksey Gurtovoy为方便模板元编程而开发的库,2003年被Boost吸纳为其中的一员,此后又历经一些大幅度修改,目前已经相当完善,其最新版本于200411月发布。MPL的出现是C++模板元编程发展中的一大创举,它提供了一个通用、高层次的编程框架,其中包括了序列(Sequence)、迭代器(Iterator)、算法(Algorithm)、元函数(Metafunction)等多种组件,具有高度的可重用性,不但提高了模板元编程的效率,而且使模板元编程的应用范围得到相当的扩展。

    (一)MPL的组织架构

        一个库的组织形式有时候甚至比它的功能还重要。MPL的作者聪明地借鉴了已经取得巨大成功的STL,在MPL中保留了许多STL的概念,对函数式的编程方式进行了精巧的包装,使得任何熟悉STL的程序员都可以轻易地理解MPL的使用方法。像STL一样,MPL有一个完整的概念体系,对组件作了精心的划分,组件之间相对独立,接口具有通用性,因此将组件之间的依存度和耦合性降低到最小的限度。

    STLMPL的组件概念对照如下:

    STL概念

     

    MPL对应概念

     

    容器(Container

    序列(Sequence

    算法(Algorithm

    算法(Algorithm

    迭代器(Iterator

    迭代器(Iterator

    仿函数(Functor

    元函数类(Metafunction

    配接器(Adaptor

    ViewInserter Iterator和相当于仿函数配接器的Binding元函数

    配置器(Allocator

    无此概念

    标准中没有定义

    宏(Macro

    (二)MPL对其他库的依赖

           MPL是一个高层次的库,它的地位和编译期执行的特殊性决定了它需要一些特殊的辅助设施,并对其他库会有所依赖。

    1BoostPreprocessor

           Preprocessor库是一个基于宏的元编程库[7]。预处理器的作用发生在编译以前,所以它比MPL所处的地位还要高端,能够真正实现代码生成。它的典型功能是迭代或者枚举相似的代码段,减少重复而易写错的代码段。MPL中不少代码是近似的,比如在vector的原始代码中,就需要定义n

    vectori { … }

    其中i1迭代到n。为了减少重复劳动,MPL的源代码大量使用自定义和Preprocessor库的宏对重复或具有递推性的内容进行迭代。不过,这也导致源代码难以阅读。比如上面一段展开后的源代码首先是定义在vector/aux_/numbered.cpp的:

  • 相关阅读:
    MySQL分区和分布性能测试[转]
    在独立的javascript文件中获取当前项目的http路径
    解决在OFFICE平台传输数据慢的问题,使用GZIP+JSON替代WEBSERVICE提供数据
    开发流程与各层软件选型
    [转]Linux下shell的工作原理
    C# 3.0中的操作符=>
    [转]Linux用户口令的管理
    Linux基本命令篇 网络管理
    [转]Linux查看磁盘使用情况命令
    恢弘的钢琴曲《出埃及记》
  • 原文地址:https://www.cnblogs.com/lexus/p/2618563.html
Copyright © 2020-2023  润新知