14

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

然而,标准库中尚未涵盖的的现状如何?

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

4

4 回答 4

15

我不会重复在网络、算法、文件系统、变体等方面已经做过的事情。但是,我可以讨论您关于信号2 的观点以及更多内容。

升压信号2

N2086过去曾提议将Boost.Signals2包含在 TR2 中。实际上,它更像是 Boost.Signals2 和 libsigc++ 的混合体。从我读到的内容来看,人们对将信号包含在标准中是相当赞成的,但是这篇论文需要做更多的工作,而且这项工作还没有完成[需要引用]。

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

Boost.Container

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

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

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

    这篇论文只提出了std::vectorstd::list并且std::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函数以将一个值钳位在一对边界值之间。提案提到了clamp来自 Boost.Algorithm 的功能作为设计灵感的来源。

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

杂项

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

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

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

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

  • P0013建议将元函数and_,or_和添加not_到标准库中,并引用 Boost.MPL 作为长期以来实现此类功能的标准库之一。更新:在 C++17 中采用std::conjunction,std::disjunctionstd::negation.

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

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

于 2015-06-05T15:46:06.117 回答
10

anyvariant收到了很多兴趣,Boost.Algorithm 的搜索内容在 Library Fundamentals TS 中。

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

于 2015-06-04T22:13:52.623 回答
6

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

于 2015-06-04T22:34:58.023 回答
1

我不知道该提案是否会用于 C++17,但建议将range-v3(大致基于提升范围)包含在 C++ 标准中。

于 2015-06-08T07:56:02.957 回答