zoukankan      html  css  js  c++  java
  • Effective C++ 条款55 让自己熟悉Boost

    1. Boost是一个C++开发者集结的社群,也是一个可自由下载的C++程序库群,它的网址是http://Boost.org.C++组织和网站有很多,但Boost有两个特性是其他组织无可匹敌的:第一,Boost由C++标准委员会成员创设,因此和C++标准委员会之间有着独一无二的密切关系,作为一个"可被加入标准C++之各种功能"的测试场是Boost的目标之一,实际上,以TR1(见条款54)提案进入标准C++的14个新程序库,超过三分之二奠基于Boost的工作成果.第二,它以公开的同僚复审(public peer review)为基础,这对于阻挡低劣的程序库很有贡献.

    2. Boost内含数十个程序库,而且还不断有共多添加进来,boost程序库的主题非常繁多,区分为十个条目:

        字符串与文本处理:覆盖具备类型安全(type-safe)的printf-like格式化动作,正则表达式(此为TR1同类功能的基础,见条款54),以及语汇单元切割(tokenizing)和解析(parsing).

        容器:覆盖"接口与STL相似且大小固定"的数组,大小可变的bitsets以及多维数组.

        函数对象和高级编程:覆盖若干被用来作为TR1机能基础的程序库,包括用来随时随地创建函数对象的Lambda.Lambda的用法不是很直观:

    using manespace boost::lambda;
    std::vector<int> v;
    //针对v的每一个元素x,打印出x*2+10,其中_1是Lambda程序库针对当前元素的一个占位符号(placeholder)
    std::for_each(v.begin(),v.end(),std::cout<<_1*2+10<<'
    ');

        泛型编程(Generic programming):覆盖一大组traits class,见条款47

        模板元编程(Template metaprogramming):覆盖一个针对编译器assertions而写的程序库,以及Boost MPL程序库.MPL提供支持编译器实体(compile-time entities)诸如types的STL-like数据结构等.

    //创建一个list-like编译期容器,其中收纳三种类型:float,double,long double,并将其命名为"floats"
    typedef boost::mpl::list<float,double,long double> floats;
    //再创建一个编译期间用以收纳类型的list,以"floats"内的类型为基础,最前面加上int,新容器取名为types
    typedef boost::mpl::push_front<floats,int>::type types;

        数学和数值(Math and numerics):包括有理数,八元数和四元数(octonions and quaternions),常见的公约数(divisior)和烧焦的多重运算,随机数等.

        正确性与测试:覆盖用来将隐式模板接口(implict template interface)形式化的程序库,以及针对"测试优先"编程形态而设计的编程.

        数据结构:覆盖leei型安全(type-safe)大的unions,以及tuple程序库.

        语言间的支持:包括允许C++和Python之间的无缝互操作性(seamless interoperability).

        内存:覆盖Pool程序库,用来做出高效率且区块大小固定的分配器(见条款50),以及多变化的智能指针(smart pointers,见条款13),包括(但不仅仅是)TR1智能指针.另一个non-TR1智能指针是scoped_array,那是个auto_ptr-like智能指针,用于动态分配数组.

        杂项:包括CRC检验,日期和时间的处理,在文件系统上来回移动等等.

    3. Boost提供的程序库功能强大,但并非万能,例如目前它没有提供针对GUI开发而设计的程序库,也没有用以连通数据库的程序库.

  • 相关阅读:
    java.util.concurrent学习
    mysql慢查优化总结
    mysql怎么限制某些查询语句的执行?
    数据库操作提交事务如果不关闭,会有什么样的后果?
    apache的500错误是写到哪个文件里面
    apache也可以做负载均衡,跟nignx的区别是什么?
    ajax提交请求为啥url要用这个函数encodeURI
    MySQL性能调优与架构设计读书笔记
    java枚举的作用
    linux的命令
  • 原文地址:https://www.cnblogs.com/reasno/p/4804607.html
Copyright © 2011-2022 走看看