【问题标题】:Which boost libraries are discussed for inclusion in C++17?讨论了哪些 boost 库以包含在 C++17 中?
【发布时间】:2015-08-19 04:52:11
【问题描述】:

对于典型的编程需求,C++11 是一个伟大的里程碑——我们用标准库替换了 95% 的 Boost 代码。

然而,标准库中尚未涵盖的its libraries 的当前状态是什么?

由于需要 Signals2 和 Lockfree,我开始怀疑。

【问题讨论】:

    标签: c++ boost stl c++17


    【解决方案1】:

    我不会重复已经在网络、算法、文件系统、变体等方面所做的工作。不过,我可以讨论一下你关于信号2 的观点以及更多内容。

    Boost.Signals2

    Boost.Signals2 过去曾由 N2086 提议包含在 TR2 中。实际上,它更像是 Boost.Signals2 和 libsigc++ 的混合体。根据我的阅读,人们对将信号包含在标准中是相当赞成的,但该论文需要更多的工作,而且这项工作从未完成[需要引用]。

    现在,应该做更多的工作来调整论文以使其适合 C++17,但如果有人能胜任这项任务,信号可能仍然是一个很好的候选者。

    Boost.Container

    不要误会我的意思,Boost.Container 并没有被提议包含在整个 C++17 中。然而,图书馆确实对一些提案有一些影响。原因如下:

    • N4510 建议一些标准容器可以包含不完整的类型,以便您可以拥有“递归”类型。这是论文中的一个最小示例:

      struct Entry
      {
          std::list<Entry> messages;
          // ...
      };
      

      该论文仅提出std::vectorstd::liststd::forward_list 具有这些要求,以便 GCC、Clang 和 MSVC 库开箱即符合 C++17 标准,并鼓励他们实现其他标准容器,以便它们也适合成语。这种递归容器实际上是Boost.Container对标准库容器带来的第一个改进。

    • N4526 讨论了游戏行业和嵌入式行业对 C++ 及其标准库的关注。除其他外,它指出许多人实际上只是在等待有人写一篇论文来提议将 Boost.Container 中的 boost::flat_mapboost::flat_set 包含到标准库中。虽然它可能根本没有写出来,或者至少没有赶上 C++17,但一篇写得很好的论文可以被接受。 更新:P0038 实际上提议考虑将扁平容器纳入标准库。

    Boost.算法

    虽然这个库是相当新的(2012 年,Boost 1.50),但它帮助塑造了一些新算法,这些算法已包含在 Library Fundamentals TS 和/或 C++17 中:

    • N4536P0025 建议标准化clamp 函数以将值钳制在一对边界值之间。提案提到了来自 Boost.Algorithm 的 clamp 函数作为设计灵感的来源。

    • N3905 和随后旨在修复设计错误的论文建议标准化新的搜索算法,最值得注意的是 Boyer-Moore 和 Boyer-Moore-Horspool 字符串搜索算法,自 Boost.Algorithm创作。

    杂项

    讨论过或对某些提案产生强烈影响的 Boost 其他功能列表:

    • 它没有进入 C++14,但受 Boost.Optional 启发的std::optional 应该可以毫无问题地进入 C++17。

    • Special Math Functions 已合并到 C++17。这些函数是 TR1 的一部分,Boost.Math 已经包含它们多年了。

    • std::not_fn 被合并到 C++17 中,已经在 Boost 中生活了多年。

    • P0013 建议将元函数and_or_not_ 添加到标准库中,并引用 Boost.MPL 作为已经实现这些功能的标准库之一。 更新:在 C++17 中采用 std::conjunctionstd::disjunctionstd::negation

    • P0033 指出 std::enable_shared_from_this 的指定较弱,并建议标准化与 Boost 实用程序版本相同的行为。还提出标准化boost::weak_from_this来完善家庭。

    • 许多提议的并发特性已经在 Boost 中(std::barrierstd::latch...)。但是,应该注意它们已经在 Boost 中实现,因为它们已被提议包含在标准库中。这一次,它反过来起作用了。对其他已经存在的类进行一些修改也是如此。

    【讨论】:

      【解决方案2】:

      anyvariant 引起了很大的兴趣,Boost.Algorithm 中的搜索内容在 Library Fundamentals TS 中。

      据我所知,没有人提出过 Signals2 或 Lockfree。

      【讨论】:

        【解决方案3】:

        一个基于boost.asio的网络库,
        基于boost.filesystem的文件系统库

        【讨论】:

          【解决方案4】:

          我不知道该提案是否\将使其适用于 C++17,但建议将 range-v3(大致基于提升范围)纳入 C++ 标准。

          【讨论】:

            猜你喜欢
            • 2019-08-04
            • 2011-12-14
            • 1970-01-01
            • 2012-03-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-09-16
            • 2016-10-29
            相关资源
            最近更新 更多