我一直在浏览Boost库的修订版1.38.0,试图确定那里是否有足够的珠宝来证明我公司外部软件审批流程的合理性.在编写测试程序和阅读文档的过程中,我得出了几个结论
当然,并非Boost中的所有内容都将在我的工程组中使用
更重要的是,其中一些库看起来比其他库更精致
事实上,有些图书馆对我来说似乎有点玩具.
经过短时间的调查后,我可以看到一些相当容易访问的库,比如boost :: variant(我非常喜欢访问者组件以及如果访问者缺少运算符,编译器会调整这个事实其中一种变种类型).我使用boost :: shared_ptr,除了我们的组已经有一组智能指针类型这一事实.
因此基于Stack Overflow用户的丰富经验,Boost库
有高品质?
不只是玩具?
有没有哪个有很高的进入障碍但是值得学习?
请注意,这与Boost认为有害的问题有些不同?
PS - 有没有一个答案(来自litb)被删除?我在这里看不到它,只在我的用户页面上摘录...
我经常使用(它让我的生活变得更简单):
智能指针(shared_ptr
,scoped_ptr
,weak_ptr
,进程间unique_ptr
):
scoped_ptr
对于基本RAII(没有共享所有权和所有权转移),免费.
shared_ptr
对于更复杂的操作 - 需要共享所有权时.但是有一些成本.
unique_ptr
- unique_ptr
通过移动仿真统一各种方法(出现在Boost),积极开展工作.
它们使用起来非常简单(仅限标题),易于学习且经过良好测试(好吧,除了可能unique_ptr
)
Boost Thread - 主动开发(线程现在是可移动的)库,用于处理线程.隐藏给定平台上线程实现的复杂性.
提升MPL和融合 - 这些更难以解释.很长一段时间我没有使用编译时的电源,但经过一些阅读和学习后发现我的一些代码可以很好地简化.还是要小心编译时间......
提升阿西奥
与第一印象(至少在不久前)相反,它不仅仅是网络库.它提供了几乎可用于任何事物的异步I/O模型.
Boost格式(强大的输出格式,但非常重)
Boost Spirit2x(Karma和Qi用于解析和基于给定语法生成输出).非常强大,可以创建解析器而无需借助外部工具.然而编译时间可能是个问题.此外,版本2x正在积极开发,文档相当稀少(尽管精神级别的邮件列表非常有用)
提升Bind,Function和Lambda让你的生活更轻松,提升凤凰 - 只是为了实验
lexical_cast(类似的东西可能很快就会出现在boost :: string中)
正则表达式/ Xpressive - 正则表达式
键入特征和概念检查 - 再次使您的生活更轻松
数学:
各种随机数发生器
各种统计分布
ublas - 用于在C++中使用LAPACK/BLAS绑定的方式
一些数学函数,通常在C++中不可用
一些控制numreric类型之间转换的工具
间歇算术
Boost Iterator(用于迭代器和外观的专用适配器,用于创建自己的)
增强单元测试框架
还有一些我在Boost中几乎没有触及的部分.可能我也忘了提几个显而易见的.
记得使用正确的工具(锤子)来解决正确的问题(钉子).请记住保持解决方案简单.记住接收功能的成本(例如shared_ptr
或boost::format
运行时开销或MPL/Fusion/Spirit/Phoenix编译时间成本和可执行大小).但是实验和学习 - 这就是乐趣所在.
当说服管理层使用新库时 - 您不必从所有库开始.从简单的事情开始(可能是那些具有长而稳定的Boost历史,广泛的编译器支持,计划包含在TR2/C++ 1x中的事物等)以及显示其优点的简单示例.
在设计跨平台(例如*nix和win32)多线程应用程序(,.)时,我发现boost
这是一个无可争议的必备条件.至少在一个实例中,仅仅这一点已经充分证明了我的雇主项目的一部分.boost::thread
boost::interprocess
boost
其余的(容器,通用编程和元编程,内存)随后作为免费赠品.
我经常使用boost::filesystem
.它完成了简单文件管理所需的一切
我想说有价值的图书馆是:
元编程(MPL enable_if
,, type/function_traits
)
预处理器 - 如果您需要它,它可能会派上用场
变体,可选 - 正如您已经注意到的那样
数学 - 四元数,额外的数学函数(虽然它们可能对你没用)
lambda:虽然语法很毛茸茸,但它很容易让人上瘾
运算符/迭代器:构造自己的类型时它们非常方便
也许Python(从未尝试过,但有些例如.KDE程序使用它)
如果你正在做共享内存之类的东西,那么Boost进程肯定是值得的.