【问题标题】:Is there a way to get Asio working without Boost?有没有办法让 Asio 在没有 Boost 的情况下工作?
【发布时间】:2009-04-08 03:07:05
【问题描述】:

我知道有一个版本的 ASIO 不包含在 Boost 命名空间中,但即便如此,ASIO 也依赖于 Boost,但我想知道是否有一种方法可以让 ASIO 在不依赖于 Boost 的情况下工作(因为我由于太多原因,无法将 Boost 包含到项目中)。

【问题讨论】:

    标签: c++ boost boost-asio


    【解决方案1】:

    不,我不这么认为。只要我听说过,ASIO 就一直在使用 boost。我认为它们是非常相互关联的。但是您可能对 bcp 工具感兴趣,它可以让您提取您想要使用的库所需的最小 boost 子集。

    【讨论】:

    • 不知道存在这样的工具,简直太棒了,如果可以的话,我会三倍赞成这个答案:)
    • asio 的想法总是以独立于 boost 的形式提供。它是。 Google for 'think asio' 或作者博客..
    • 或者您可以使用 boost NO_LIBS 定义来排除非标头库。我正在使用仅标头 asio 和仅标头提升。有什么好抱怨的?无需额外编译。
    【解决方案2】:

    Asio 还有一个非增强版:

    Asio 有两种变体:(非 Boost)Asio 和 Boost.Asio。

    见:

    http://think-async.com/Asio/

    【讨论】:

    • 但它仍然需要大量的 boost 标头,即使它不是 boost 的一部分,我也被这个名字所迷惑
    • 坦率地说,我看不出您针对的是哪个标头。它有自己的线程位..
    • -1 否决。这不是真的,asio 仍然只需要头文件的 boost 文件。 分离的原因是因为 asio 已经有一个巨大的命名空间,而添加 boost 只会使其更长。此外,asio 的更新发布时间表与 boost 不同,有些人觉得更新 asio 的频率要比 boost 更频繁。最后,在没有boost::bind() 的情况下使用 ASIO 几乎是不可能的!
    • 自从我上次使用 ASIO 以来,这可能已经改变了。从历史上看,ASIO 肯定需要提升。现在我没有看到提到这种依赖关系......
    • 其实现在 C++11 有了 lambdas boost::bind() 就不需要了
    【解决方案3】:

    “非boost asio”有自己的线程位,而不是使用boost.thread,但它仍然需要boost.date_time、boost.array、boost.utility、boost.bind、boost.shared_ptr...

    没有任何版本的 Asio 可以在没有任何 Boost 依赖的情况下工作。

    【讨论】:

    • TR1 的大部分权利和大多数编译器已经支持它。日期时间我不确定是否可以选择运行它..不记得了。
    • 刚刚回忆起 boost.system 是一个可以摆脱的......记忆让我失望。
    【解决方案4】:

    最新的 ASIO 版本可以在没有 Boost 的情况下在独立模式下工作。这种模式可能是由库的 C++11 支持启用的,因为它现在可以使用标准线程、期货等,而不是它们的 Boost 实现。您可以像下面这样简单地包含 ASIO 并享受:

    #define ASIO_STANDALONE
    #include <asio.hpp>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 2016-01-19
      相关资源
      最近更新 更多