【发布时间】:2015-08-19 04:52:11
【问题描述】:
对于典型的编程需求,C++11 是一个伟大的里程碑——我们用标准库替换了 95% 的 Boost 代码。
然而,标准库中尚未涵盖的its libraries 的当前状态是什么?
由于需要 Signals2 和 Lockfree,我开始怀疑。
【问题讨论】:
对于典型的编程需求,C++11 是一个伟大的里程碑——我们用标准库替换了 95% 的 Boost 代码。
然而,标准库中尚未涵盖的its libraries 的当前状态是什么?
由于需要 Signals2 和 Lockfree,我开始怀疑。
【问题讨论】:
我不会重复已经在网络、算法、文件系统、变体等方面所做的工作。不过,我可以讨论一下你关于信号2 的观点以及更多内容。
Boost.Signals2 过去曾由 N2086 提议包含在 TR2 中。实际上,它更像是 Boost.Signals2 和 libsigc++ 的混合体。根据我的阅读,人们对将信号包含在标准中是相当赞成的,但该论文需要更多的工作,而且这项工作从未完成[需要引用]。
现在,应该做更多的工作来调整论文以使其适合 C++17,但如果有人能胜任这项任务,信号可能仍然是一个很好的候选者。
不要误会我的意思,Boost.Container 并没有被提议包含在整个 C++17 中。然而,图书馆确实对一些提案有一些影响。原因如下:
N4510 建议一些标准容器可以包含不完整的类型,以便您可以拥有“递归”类型。这是论文中的一个最小示例:
struct Entry
{
std::list<Entry> messages;
// ...
};
该论文仅提出std::vector、std::list 和std::forward_list 具有这些要求,以便 GCC、Clang 和 MSVC 库开箱即符合 C++17 标准,并鼓励他们实现其他标准容器,以便它们也适合成语。这种递归容器实际上是Boost.Container对标准库容器带来的第一个改进。
N4526 讨论了游戏行业和嵌入式行业对 C++ 及其标准库的关注。除其他外,它指出许多人实际上只是在等待有人写一篇论文来提议将 Boost.Container 中的 boost::flat_map 和 boost::flat_set 包含到标准库中。虽然它可能根本没有写出来,或者至少没有赶上 C++17,但一篇写得很好的论文可以被接受。 更新:P0038 实际上提议考虑将扁平容器纳入标准库。
虽然这个库是相当新的(2012 年,Boost 1.50),但它帮助塑造了一些新算法,这些算法已包含在 Library Fundamentals TS 和/或 C++17 中:
N4536 和P0025 建议标准化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::conjunction、std::disjunction 和 std::negation。
P0033 指出 std::enable_shared_from_this 的指定较弱,并建议标准化与 Boost 实用程序版本相同的行为。还提出标准化boost::weak_from_this来完善家庭。
许多提议的并发特性已经在 Boost 中(std::barrier、std::latch...)。但是,应该注意它们已经在 Boost 中实现,因为它们已被提议包含在标准库中。这一次,它反过来起作用了。对其他已经存在的类进行一些修改也是如此。
【讨论】:
any 和 variant 引起了很大的兴趣,Boost.Algorithm 中的搜索内容在 Library Fundamentals TS 中。
据我所知,没有人提出过 Signals2 或 Lockfree。
【讨论】:
一个基于boost.asio的网络库,
基于boost.filesystem的文件系统库
【讨论】:
我不知道该提案是否\将使其适用于 C++17,但建议将 range-v3(大致基于提升范围)纳入 C++ 标准。
【讨论】: