Ответ 1
Я не буду повторять то, что уже было сделано в отношении сетей, алгоритмов, файловой системы, варианта и любого. Тем не менее, я могу обсудить вашу мысль о сигналах2 и немного больше.
Boost.Signals2
Boost.Signals2 был предложен в прошлом N2086 для включения в TR2. На самом деле это было скорее сочетание между Boost.Signals2 и libsigС++. Из того, что я прочитал, люди были весьма благоприятны для включения сигналов в стандарт, но в документе требовалась большая работа, и эта работа так и не была закончена.
Теперь нужно сделать еще больше работы, чтобы адаптировать бумагу так, чтобы она соответствовала С++ 17, но если кто-то подходит к задаче, сигналы могут, вероятно, быть хорошим кандидатом для включения.
Boost.Container
Не поймите меня неправильно, Boost.Container не был предложен для включения в С++ 17 в целом. Однако библиотека оказывает определенное влияние на некоторые предложения. Вот почему:
-
N4510 предлагает, чтобы некоторые стандартные контейнеры могли содержать неполные типы, чтобы вы могли иметь "рекурсивные" типы. Вот минимальный пример из статьи:
struct Entry { std::list<Entry> messages; // ... };
В документе предлагается только, чтобы
std::vector
,std::list
иstd::forward_list
имели эти требования, чтобы библиотеки GCC, Clang и MSVC были совместимы с стандартом С++ 17 и поощряли их к внедрению другие стандартные контейнеры, чтобы они могли также соответствовать идиоме. Такие рекурсивные контейнеры на самом деле являются одним из первых улучшений, внесенных Boost.Container над стандартными библиотечными контейнерами. -
N4526 обсуждает проблемы игровой индустрии и встроенной индустрии о С++ и ее стандартной библиотеке. Среди прочего, он отмечает, что многие люди просто ждут, когда кто-нибудь напишет документ, чтобы предложить включить
boost::flat_map
иboost::flat_set
из Boost.Container в стандартную библиотеку. Хотя это может и не быть написано вообще или, по крайней мере, не вовремя для С++ 17, может быть принято хорошо написанное письмо. Обновление: P0038 фактически предлагает рассмотреть вопрос о включении плоских контейнеров в стандартную библиотеку.
Boost.Algorithm
Хотя эта библиотека довольно новая (2012, Boost 1.50), она помогла сформировать некоторые новые алгоритмы, которые были включены в Основы библиотеки TS и/или в С++ 17:
-
N4536 и P0025 предложить стандартизировать функцию
clamp
, чтобы закрепить значение между парой граничных значений. В предложениях упоминается функцияclamp
от Boost.Algorithm как источник вдохновения для дизайна. -
N3905 и последующие документы, направленные на исправление ошибки дизайна, предполагают стандартизацию новых алгоритмов поиска, в первую очередь Boyer-Moore и алгоритмы поиска строк Boyer-Moore-Horspool, которые жили в Boost.Algorithm с момента его создания.
Разное
Список других функций из Boost, которые обсуждаются или сильно повлияли на некоторые предложения:
-
Он не попал в С++ 14, но
std::optional
, вдохновленный Boost.Optional, должен превратить его в С++ 17 без проблем. -
Специальные математические функции были объединены в С++ 17. Эти функции были частью TR1 и Boost.Math включили их уже много лет.
-
std::not_fn
был объединен с С++ 17 и уже много лет живет в Boost. -
P0013 предлагает добавить метастандарты
and_
,or_
иnot_
в стандартную библиотеку и ссылается Boost.MPL как одна из стандартных библиотек, которые давно реализовали такие функции. Обновление: принято на С++ 17 какstd::conjunction
,std::disjunction
иstd::negation
. -
P0033 утверждает, что
std::enable_shared_from_this
слабо определен и рекомендует стандартизировать то же поведение, что и версия Boost утилиты. Он также предлагает стандартизироватьboost::weak_from_this
для завершения семейства. -
Многие из предложенных функций concurrency уже находятся в Boost (
std::barrier
,std::latch
...). Однако следует отметить, что они были реализованы в Boost, потому что они были предложены для включения в стандартную библиотеку. На этот раз он работал наоборот. Это также относится к некоторым изменениям для других уже существующих классов.