【问题标题】:Boost Library [closed]Boost库[关闭]
【发布时间】:2010-09-14 00:54:35
【问题描述】:

自从我开始使用这个网站以来,我不断听到关于 Boost 库的消息。我想知道 Boost 库有哪些主要优点(因此我为什么要使用它)以及 Boost 库的可移植性如何?

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    Boost 由标准委员会的几名成员组织。
    因此,它是下一个标准中图书馆的温床。

    1. 它是对 STL 的扩展(它填补了遗漏的位)
    2. 有据可查。
    3. 经过同行评审。
    4. 它的活跃度很高,因此可以快速发现并修复错误。
    5. 它是平台中立的,适用于任何地方。
    6. 免费使用。

    随着 tr1 即将推出,很高兴知道 boost 已经覆盖了很多领域。 tr1 中的很多库基本上都是直接从 boost 原件改编而来的,因此已经过尝试和测试。不同之处在于它们已被移入 std::tr1 命名空间(而不是 boost)。

    您需要做的就是将以下内容添加到您的编译器默认include search path

    <boost-install-path>/boost/tr1/tr1
    

    然后当你包含标准头文件时,boost 会自动将所有需要的东西导入命名空间 std::tr1

    例如:

    要使用 std::tr1::share_ptr 你只需要包含 。这将为您提供一个文件中的所有智能指针。

    【讨论】:

      【解决方案2】:

      您只需阅读Boost Background Information 页面即可快速了解为什么应该使用 Boost 以及可以将其用于什么用途。值得花几分钟时间。

      【讨论】:

      • 我很惊讶这个问题的作者没想到会读到这个。
      • 在他的辩护中,现在它可以在这里找到并且可供网站上的每个人搜索(并且可能在谷歌搜索结果中排名靠前)。
      【解决方案3】:

      99% 便携。

      我会说它有很多库,一旦你发现了通过 boost 解决的需求,它们就会非常有用。您可以自己编写代码,也可以使用非常可靠的库。 拥有像 Multi-Index、Lambda、Program Options、RegEx、SmartPtr 和 Tuple 这样的现成资源真是太棒了……

      最好的办法是花一些时间浏览不同库的文档并评估它是否对您有用。

      值得!!

      【讨论】:

      • 几年前,Boost 的几个部分在 Sun 和 IBM 的 C++ 编译器上都失败了。不确定现在的情况,但我不会将便携性评为接近 99%。
      • @john 对该评论再次投赞成票。 Borland/CodeGear/Embarcadero 编译器也不能与 boost 的许多部分一起工作。
      【解决方案4】:

      Boost 很棒,但只是在这里玩 Devil's Advocate 是您可能不想使用 Boost 的一些原因:

      • 有时无法在旧编译器上编译/正常工作。
      • 与使用较少模板的方法相比,它通常会增加编译时间。
      • 某些 Boost 代码可能不会像您认为的那样做。阅读文档!
      • 模板滥用会导致无法阅读的错误消息。
      • 模板滥用会导致代码难以在调试器中单步执行。
      • 它是最前沿的 C++。下一个版本的 Boost 可能不再在您当前(旧)的编译器上编译。

      所有这一切并不意味着即使您不按原样使用 Boost,您也不应该查看 Boost 代码并自己获得一些想法。

      【讨论】:

      • 使用第 5 条:同意!尝试调试 boost 图形库...
      【解决方案5】:

      你会得到很多 C++0x 中的东西。但除了一般性之外,一些更好的细节是一个简单的regex librarycasting from strings to ints 的转换库(词法转换):

      int iResult = 0;
      try
      {
          iResult = lexical_cast<int>("4");
      }
      catch(bad_lexical_cast &)
      {
          cout << "Unable to cast string to int";
      }
      

      一个date/time library,等等……

      using namespace boost::gregorian;
      date weekstart(2002,Feb,1);
      date thursday_next = next_weekday(weekstart, Thursday); // following Thursday
      

      还有一个Python interface(Boost Python),一个lexer/parser DSL(Boost Spirit):

      // A grammar in C++ for equations
      group       = '(' >> expression >> ')';
      factor      = integer | group;
      term        = factor >> *(('*' >> factor) | ('/' >> factor));
      expression  = term >> *(('+' >> term) | ('-' >> term));
      

      这只是表面上的问题......

      【讨论】:

      • 我喜欢这个答案,因为它展示了 Boost 的实际用例
      【解决方案6】:

      Boost 是 C++ 库的集合。其中 10 个包含在 C++0x 的 tr1 中。

      你可以get started with boost here

      【讨论】:

        【解决方案7】:

        Boost 是一组高质量的同行评审 C++ 库,它们强调可移植性和正确性。它是语言和标准库新增功能的事实上的试验场。查看他们的网站了解更多详情。

        【讨论】:

          【解决方案8】:

          Boost的优势: 它广泛可用,可移植到任何现代 C++ 编译器或任何平台。
          这些功能与平台无关,您不必为每个新框架学习新的线程设计。
          它以标准的方式封装了很多平台特定的功能,例如文件系统。

          这是 C++ 应该附带的! Java 的很多流行之处在于它附带了一个标准库,可以做几乎所有你想做的事情。不幸的是,C++ 只继承了有限的 C/Unix 标准函数。

          【讨论】:

            【解决方案9】:

            shared_ptrweak_ptr,尤其是在多线程代码中,单独值得安装 boost。 BOOST_STATIC_ASSERT 也非常适合进行编译时逻辑检查。

            boost 中的许多类和实用程序都在头文件中,这意味着您无需编译任何东西就可以获得很多功能,这也是一个优点。可移植性通常不是问题,除非您使用非常旧的编译器。我曾经尝试让 MPL 与 VC6 一起工作,它在完全爆炸之前打印出 40,000 个警告/内部错误。但总的来说,无论您的平台或编译器供应商如何,大多数库都应该可以工作。

            考虑到 Boost 中的很多东西已经在 TR1 中,并且很可能会出现在 C++ 标准库的下一个版本中。这是一个相当大的认可。

            【讨论】:

              【解决方案10】:

              Boost 是一个非常广泛的(通常)通用结构库,几乎可以在任何应用程序中提供帮助。这可以从 C++ 0x 规范中包含许多 boost 组件的事实来证明。

              它至少还可以在主要平台上移植,并且应该可以移植到几乎任何具有大多数标准兼容 C++ 编译器的东西。

              唯一的警告是,boost 库之间可能存在很多混合的依赖关系,这使得只挑选一个特定的组件来分发(而不是整个 boost 库)变得更加困难。

              【讨论】:

              【解决方案11】:

              以上所有,再加上它鼓励了许多现代的、最佳实践的 C++ 技术。它往往会提高代码的质量。

              【讨论】:

                【解决方案12】:

                另请注意,大多数 boost 是模板,因此不需要构建
                (只包括正确的头文件)。

                需要构建的少数部分是可选的:
                这些都可以独立构建,从而防止不必要的代码出现不必要的膨胀。

                【讨论】:

                  猜你喜欢
                  • 2010-10-09
                  • 2011-01-27
                  • 1970-01-01
                  • 2014-11-14
                  • 2012-12-11
                  • 2020-03-26
                  • 1970-01-01
                  • 2011-07-05
                  • 1970-01-01
                  相关资源
                  最近更新 更多