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<<'\n');
泛型编程(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开发而设计的程序库,也没有用以连通数据库的程序库.