从哪里开始学习使用Boost库?


16

最近,Boost在我正在从事的项目中可用,并且我对此没有太多经验。该库具有很多部分和功能,很难知道从哪里开始学习它-特别是因为我将在编写生产代码时尝试学习它(所以它不会让我太慢)。

如果有人可以列出大约3到5个通常在日常编程中非常有用的功能,并说明它们为何有用,我将不胜感激。然后,我可以开始学习并使用它们了-它至少会让我在图书馆中站稳脚跟,并且是一个开始学习/应用它的友好场所:)

提前致谢!


在这种情况下,我不理解“立足于图书馆”一词。书怎么了?有一些通常的供应商提供的主题,必须将它们放在您的团队书架上。
2011年

我一直在阅读编程知识-我没有时间重新阅读关于Boost的书籍或参考指南,以了解它的所有内容以及此刻是否有用。我想在这里和那里开始使用它,然后在工作时慢慢拿起它,我想要一些真正有用的Boost组件的核心示例。例如,斯科特·迈耶斯(Scott Meyers)的《有效C ++》谈到了shared_ptr不间断(其他很少),因为它是如此的好。还有什么在助推方面异常有用?
约翰·汉弗莱斯-w00te 2011年

我个人非常喜欢BOOST_FOREACH宏,观察者/订阅者模式,正则表达式,日期/时间解析器(构面),但是在使用代码修改现有的Boost时,我偶然遇到了它们,或者如DeadMG所述。我只是摸索了冰山一角,但它感觉像是STL的自然延续。
2011年

Answers:


8

如果您使用的是TR1之前的编译器,那么智能指针

boost::shared_ptr
boost::weak_ptr
boost::scoped_ptr 

boost::scoped_array
boost::shared_array

如果您的编译器已经具有智能指针,请使用它们。
原因很明显,没有智能指针的C ++基本上不是C ++

boost ptr_contaier库。

所有STL容器都专门重新实现以容纳指针。容器不仅拥有指针的所有权,因此当销毁容器时,它会自动销毁所有指针。但是它还提供对元素的访问,作为普通的对象引用(而不是指针),这使在没有包装函子的标准算法中轻松使用对象成为可能。

boost lambda库。(请参阅下面的评论)

对于简单的事情,STL函子和粘合剂是可以的。但是boost :: lambda进行了下一步,使使用标准算法时的事情变得更加简单。

boost :: any和boost :: variant

当您需要保留对象而不希望知道它们的确切类型时。

多索引容器

允许以多种不同方式访问元素的容器。
具有对象矢量和用于快速搜索矢量的单独地图的日子已经一去不复返了。在将元素插入/删除容器时,这减少了维护两个容器所需编写的样板。

boost :: lexical_cast

boost :: lexical_cast可能是现实生活中最没有用的东西,但有很多乐趣。它将任何对象与字符串进行转换(只要该类型定义了适当的<<和>>运算符)。在调试时转储错误消息非常有用。


1
Boost.Phoenix已正式替换了Boost.Lambda,后者现在已被弃用。对于新代码,请推荐前者而不是后者。:-]
ildjarn 2011年

16

Boost不是框架,也不是库。这是一个质量受控,经过同行评审的图书馆馆藏。您不会学习Boost。这些库是单独的-当您需要某些东西时,请检查它是否在Boost中,如果存在,则您可以学习该库。而已。您无法掌握boost :: variant,而无法掌握boost :: optional。


4
您可以说boost是一个质量标签和一个分发集。
克拉姆

1

Boost是库的集合。下次执行代码合并时,请在Boost中选择一个您认为可能会帮助您的库并使用它。该文档非常好,选择简单用法应该没有问题。当您尝试做更多聪明的事情时,将会出现更复杂的事情。

示例:带有boost :: thread call_once的线程安全单例。

示例:使用令牌生成器读取key:value的配置文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.