最近,Boost在我正在从事的项目中可用,并且我对此没有太多经验。该库具有很多部分和功能,很难知道从哪里开始学习它-特别是因为我将在编写生产代码时尝试学习它(所以它不会让我太慢)。
如果有人可以列出大约3到5个通常在日常编程中非常有用的功能,并说明它们为何有用,我将不胜感激。然后,我可以开始学习并使用它们了-它至少会让我在图书馆中站稳脚跟,并且是一个开始学习/应用它的友好场所:)
提前致谢!
最近,Boost在我正在从事的项目中可用,并且我对此没有太多经验。该库具有很多部分和功能,很难知道从哪里开始学习它-特别是因为我将在编写生产代码时尝试学习它(所以它不会让我太慢)。
如果有人可以列出大约3到5个通常在日常编程中非常有用的功能,并说明它们为何有用,我将不胜感激。然后,我可以开始学习并使用它们了-它至少会让我在图书馆中站稳脚跟,并且是一个开始学习/应用它的友好场所:)
提前致谢!
Answers:
boost::shared_ptr
boost::weak_ptr
boost::scoped_ptr
boost::scoped_array
boost::shared_array
如果您的编译器已经具有智能指针,请使用它们。
原因很明显,没有智能指针的C ++基本上不是C ++
所有STL容器都专门重新实现以容纳指针。容器不仅拥有指针的所有权,因此当销毁容器时,它会自动销毁所有指针。但是它还提供对元素的访问,作为普通的对象引用(而不是指针),这使在没有包装函子的标准算法中轻松使用对象成为可能。
对于简单的事情,STL函子和粘合剂是可以的。但是boost :: lambda进行了下一步,使使用标准算法时的事情变得更加简单。
当您需要保留对象而不希望知道它们的确切类型时。
允许以多种不同方式访问元素的容器。
具有对象矢量和用于快速搜索矢量的单独地图的日子已经一去不复返了。在将元素插入/删除容器时,这减少了维护两个容器所需编写的样板。
boost :: lexical_cast可能是现实生活中最没有用的东西,但有很多乐趣。它将任何对象与字符串进行转换(只要该类型定义了适当的<<和>>运算符)。在调试时转储错误消息非常有用。
Boost是库的集合。下次执行代码合并时,请在Boost中选择一个您认为可能会帮助您的库并使用它。该文档非常好,选择简单用法应该没有问题。当您尝试做更多聪明的事情时,将会出现更复杂的事情。
示例:带有boost :: thread call_once的线程安全单例。
示例:使用令牌生成器读取key:value的配置文件。