代码之家  ›  专栏  ›  技术社区  ›  Don Wakefield

Boost的最佳组件是什么?[闭门]

  •  26
  • Don Wakefield  · 技术社区  · 17 年前

    我一直在浏览Boost库的1.38.0版,试图确定是否有足够的宝石来证明我公司的外部软件批准流程是合理的。在编写测试程序和阅读文档的过程中,我得出了几个结论

    • 当然,并非Boost中的所有东西都能在我的工程团队中使用
    • 更重要的是,这些库中的一些看起来比其他库更加精巧

    事实上,有些图书馆对我来说有点像玩具。

    有许多相当容易访问的库,我可以看到它们在经过一段短时间的调查后投入使用,例如 boost::variant 来访者 boost::共享\u ptr

    因此,基于堆栈溢出用户的广泛经验,这将提升库的性能

    • 有高质量的吗?
    • 它们不仅仅是玩具吗?
    • 有没有什么入门门槛高但值得学习的课程?

    请注意,这与中提出的问题有些不同 Boost considered harmful?

    12 回复  |  直到 9 年前
        1
  •  19
  •   Anonymous    17 年前

    我经常使用(这使我的生活更简单):

    • shared_ptr , scoped_ptr , weak_ptr unique_ptr

      • 作用域ptr 对于基本RAII(无共享所有权和所有权转让),无需支付任何费用。
      • 共享ptr 对于更复杂的操作-当需要共享所有权时。但也有一些成本。
      • 独特的 -boost在统一各种方法(目前在boost上)以实现
      • 它们非常简单易用(仅限页眉),易于学习,并且经过了很好的测试(除了 )
    • Boost Thread-主动开发的(线程现在是可移动的)用于处理线程的库。隐藏给定平台上线程实现的复杂性。

    • Boost MPL和Fusion——这些更难解释。很长一段时间我没有使用编译时功能,但经过一些阅读和学习,我发现我的一些代码可以很好地简化。不过,要注意编译时间。。。

    • 助推Asio

    • Boost格式(强大的输出格式,但非常繁重)

    • 词法转换(类似的东西可能会随着boost::string的诞生而诞生)

    • 正则表达式/Xpressive-正则表达式

    • 类型特征和概念检查-再次让你的生活更轻松

    • 数学:

      • 各种统计分布
      • UBLAS——在C++中使用LAPACK/BLAS绑定
      • 控制numeric类型之间转换的一些工具
    • Boost迭代器(用于迭代器和facade的专用适配器,用于创建自己的迭代器)

    • Boost单元测试框架

    还有一些我在Boost中几乎没有接触过的部分。可能我也忘了提几个明显的问题。

    记住使用正确的工具(锤子)解决正确的问题(钉子)。记住保持解决方案的简单性。记住接收功能的成本(例如 共享ptr boost::format

    当涉及到说服管理层使用新的库时,你不必从所有的库开始。从简单的事情开始(可能是那些有着长期稳定的Boost历史、广泛的编译器支持、计划包含在TR2/C++1x中的事情,等等)和简单的例子来展示这些好处。

        2
  •  13
  •   vladr    17 年前

    我发现 boost 成为一个无人竞争的人 必备品 boost::thread , boost::interprocess )至少在一个例子中,这一点就足以证明采用 促进

        3
  •  8
  •   Ajay    8 年前

    我经常使用 boost::filesystem . 它完成了简单文件管理所需的所有工作

        4
  •  6
  •   jpalecek    17 年前

    • 元编程(MPL, enable_if , type/function_traits )
    • 预处理器-如果您需要,它可能会派上用场
    • 数学-四元数,额外的数学函数(尽管它们可能对您没有用处)
    • 运算符/迭代器:它们在构造自己的类型时非常方便

    可能是Python(从未尝试过,但有些KDE程序使用它)

        5
  •  5
  •   Jason S    17 年前
        6
  •  4
  •   user69594 user69594    17 年前

    如果使用STL,lambda会有所帮助。它使您能够就地创建谓词,如下所示:

    for_each(a.begin(), a.end(), std::cout << _1 << ' ');
    

    此代码输出由空格分隔的容器中的所有元素。

        7
  •  4
  •   Richard    17 年前

    C++0x标准库的许多新增内容最初是作为Boost库的一部分创建的。

        8
  •  4
  •   Laserallan    17 年前

    我个人认为你应该看看那些隐藏特定于平台的东西的库,比如线程、ipc、内存映射文件、文件系统、异步IO等等。

    这可以节省大量的时间和麻烦,在多平台项目,往往集中于暴露功能,而不是演习在幻想C++特征。

        9
  •  4
  •   BatchyX    17 年前

    如果您需要解析比简单的键/值对更复杂的文本文件,我强烈建议您 Boost::spirit . 它有很高的学习曲线,但一旦你弄明白了,它就可以让你轻松地将EBNF语法嵌入到代码中。它比编写自己的解析器更健壮。我还发现自己创建的文件格式更多地是为了方便文件编写者而不是解析代码编写者。

        10
  •  2
  •   Ferruccio    17 年前

    另一方面,最近发布了一组PDF文件,记录了一些更常见的boost库。你可以从 SourceForge

        11
  •  2
  •   Benoît photo_tom    17 年前

    我已经读了其他答案,我 添加Boost.Graph(BGL)及其好友Boost.Property\u映射。这两件事确实改变了我的日常工作。

    它设计得非常好,但大多数人一开始都会被推迟,因为在真正理解所有概念的目的之前,要付出相当高的代价。但一旦你掌握了这个图书馆,就很难没有它了!