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开发而设计的程序库,也没有用以连通数据库的程序库.

时间: 2024-11-03 05:24:15

Effective C++ 条款55 让自己熟悉Boost的相关文章

Effective C++ 条款54 让自己熟悉包括TR1在内的标准程序库

1. TR1(Technical Report 1)是C++ 03标准的一个扩展,它并不属于C++ 03标准,只是一份草稿文件,用于指出下一版C++标准很可能吸收的特性.目前,它的大部分已被C++ 11采纳,成为官方标准. 2. C++ 98列出的标准库的组成: STL(Standard Template Library,标准模板库).包含容器,迭代器,算法,函数对象,各种容器适配器(container adapter)和函数对象适配器(function object adapter)等. Io

Effective C++ 的55个条款

看完Effective C++才觉得平时程序设计时需要注意的一些问题,有一定的收获,不过因为没什么项目实践, 并未很深入了解具体情况如何,还需后继实践~ 列举一下55个条款: 1. 视C++为一个语言联邦. 2. 尽量以const, enum ,inline 替换#define a)  对于单纯常量,最好以const 对象或 enum 替换 #define b)  对于形似函数的宏,最好改用inline 函数替换 #define 3. 尽可能使用const a)  将某些东西声明为const可帮

Effective C++ 条款13/14 以对象管理资源 || 在资源管理类中小心拷贝行为

三.资源管理       资源就是一旦你使用了它,将来不用的时候必须归还系统.C++中最常用的资源就是动态内存分配.其实,资源还有 文件描述符.互斥器.图形界面中的字形.画刷.数据库连接.socket等. 1.        以对象管理资源       void f() {     investment *plv = createInvestment();     //这里存在很多不定因素,可能造成下面语句无法执行,这就存在资源泄露的可能.     delete plv; }      这里我们

More Effective C++ 条款35 让自己习惯于标准C++ 语言

(由于本书出版于1996年,因此当时的新特性现在来说可能已经习以为常,但现在重新了解反而会起到了解C++变迁的作用) 1. 1990年后C++的重要改变 1). 增加了新的语言特性:RTTI,namespaces,bool,关键词mutable和explicit,enums作为重载函数之自变量所引发的类型晋升转换,以及"在class 定义区内直接为整数型(intergral) const static class members设定初值"的能力. 2). 扩充了Templates的特性

effective c++ 条款4 make sure that objects are initialized before they are used

1 c++ 类的数据成员的初始化发生在构造函数前 class InitialData { public: int data1; int data2; InitialData(int a, int b) { data1 = a: //this is assignment data2 = b; //this is assignment } /* InitialData(int a, int b):data1(a),data2(b) //this is initial {} */ } 2 不同cpp文

More Effective C++ 条款34 如何在一个程序中结合C++和C

1. C++和C混合使用的前提之一就是编译器产生兼容的目标文件(.lib和.dll等).所谓"兼容",指的是编译器在"预编译器相依的特性上"一致,如int和double大小,参数压栈机制等,只有在这个基础上才能讨论结合使用C++和C模块的问题. 2. 在1的基础上,要结合使用C++和C的模块,主要有以下几点需要注意: 1). name mangling(名称重整) Name mangling是C++用于支持函数重载的机制,它对重载的函数名称进行一定改变,使得每个函数

Effective C++ 条款3 尽可能用const

1. const可被施加于任何作用域内的对象,函数参数,函数返回类型,成员函数本体.用const修饰指针,如果const出现在*之前,表明指针不能更改所指向的对象的内容,如果const出现在*之后,表明指针只能指向同一块内存.另外int const*p和const int*p含义相同.如果对象成员有普通指针,那么构造该类的一个const对象时,const修饰使得该指针只能指向同一块内存,但指针指向的内容可以改变. 2. 将某些东西声明为const可以帮助编译器侦测出错误用法. 3. 编译器强制实

effective c++ 条款13 use object to manage resources.

请求的系统资源需要最终还回系统,为了避免遗忘返还这个动作,可以利用析构函数在object销毁时自动调用的特点来实现. 简单说就是用object来管理资源. 以内存资源为例 class Investment {}; Investment* creatInvestment(){...} // factory function to produce investment object void main() { Investment* pInv = creatInvestment();//call t

effective c++ 条款3 use const whereever you can

1 const 传达的意思应该是这个变量是常量不能更改 2 const 在 * 左边表示数据是const,在右边表示指针是const // char greeting[] = "hello"; char* p = greeting; //const *: const data //* const: const pointer char const *p1 = greeting; // const data char * const p2 = greeting; // const poi