Стандарт C++11 обеспечивает что-то вроде boost::any?
Например boost::function
почти полностью std::function
то же самое с boost::shared_ptr
Но я не могу найти std::any
? Был ли он переименован или вообще не был помещен в новый стандарт по какой-либо причине?
4 ответа
Не каждая библиотека из boost делает его стандартным (и даже те, которые действительно могут удалить компоненты). Обычно комитет довольно консервативен, когда дело доходит до добавления в стандартную библиотеку (поскольку почти невозможно удалить что-либо на более позднем этапе, если включение было ошибкой (.eg, потому что есть лучшая альтернатива)).
boost::function
а также boost::shared_ptr
где в значительной степени дано для включения, так как они, где уже часть tr1
, boost::any
с другой стороны, не делали разрез. Однако он может быть включен в стандартную библиотеку позднее (например, в следующем техническом отчете, смотрите здесь). В то время как boost::any
приятно иметь, я бы не оценил это так же важно, как, например, shared_ptr
,
Заключительное: boost::any
не является частью C++11, так как комитет не видит острой необходимости включать его
Так как вопрос был задан, мы продвинулись в направлении std:: эксперимент:::: как дополнительная функция, выбранная из стандарта C++14.
Затем он был реализован в GCC 5.1, по крайней мере.
С тех пор эта функция была стандартизирована в C++17, что привело к std:: any. См. Также std:: variable в C++17 для безопасного объединения типов, которое либо содержит одну из ограниченных альтернатив известных типов, либо пусто (спасибо remy-lebeau за подсказку).
Std::any недавно был принят в стандарт C++17:
Я думаю, что стандартная позиция состояла в том, что библиотека НЕ будет включена в новый стандарт, если она не будет представлена для включения, а затем для прохождения комитета.
Я не уверен, что boost::any когда-либо был представлен. Возможно нет. Однако вы все равно можете использовать boost::any.
Я предполагаю, что с C++11 библиотеки надстроек будут переписаны, некоторые будут считаться избыточными, а другие будут изменены, чтобы использовать семантику перемещения, списки инициализаторов и auto, таким образом, написанные в стиле C++11 с функциями C++11.
Скорее всего, все новые библиотеки будут в C++11, но существующие буст-пакеты будут оставаться доступными в течение некоторого времени, так как многие еще не переключатся на компиляторы C++11. Я также предположил бы, что в пакет сначала войдут только те возможности C++11, которые реализованы всеми основными компиляторами.
Вероятно, это больше вопрос для программистов, чем для stackru, а еще лучше для comp.std.C++., Модерируемых и улучшающих списки рассылки.