Подтвердить что ты не робот

Имеет ли стандарт С++ 11 что-то вроде boost:: any?

например boost::function перемещается почти полностью на std::function, то же самое происходит с boost::shared_ptr

Но я не могу найти std::any? Был ли он переименован или не был помещен в новый стандарт вообще по какой-либо причине?

4b9b3361

Ответ 1

Не каждая библиотека из boost делает ее стандартной (и даже те, которые могут удалить компоненты). Как правило, комитет довольно консервативен, когда дело доходит до добавления в стандартную библиотеку (поскольку почти невозможно получить что-то удаленное в более поздней точке, если включение было ошибкой (например, потому что есть лучшая альтернатива)).

boost::function и boost::shared_ptr, где довольно много данных для включения, так как они уже являются частью tr1. boost::any с другой стороны не делал разреза. Однако он может быть включен в стандартную библиотеку позже (например, в следующем техническом отчете, посмотрите здесь). Хотя boost::any приятно иметь, я бы не оценил его так же важно, как, например, shared_ptr.

Заключение: boost::any не является частью С++ 11, так как комитет не видел никакой насущной необходимости включать его

Ответ 2

Поскольку вопрос был задан, мы продвинулись в направлении std:: experimental:: any как опция, проголосовавшая из С++ 14 стандарт.

Это было тогда реализовано в GCC 5.1, по крайней мере.

Эта функция была с тех пор стандартизована в С++ 17, что привело к std:: any. См. Также С++ 17 std:: variant для объединения типов, которое либо содержит одну из ограниченных известных типов, либо пусто (спасибо remy-lebeau для наконечника).

Ответ 4

Я думаю, что позиция по умолчанию состояла в том, что библиотека НЕ ​​включалась в новый стандарт, если только она не была включена, и затем передала комитет.

Я не уверен, что boost:: any был когда-либо представлен. Возможно нет. Однако вы все равно можете использовать boost:: any.

Мое предположение заключается в том, что с перезаписываемыми библиотеками С++ 11 некоторые будут считаться избыточными, а другие будут изменены, чтобы использовать семантику перемещения, списки инициализаторов и авто, написанные в стиле С++ 11 с помощью С++ 11 функций.

Скорее всего, новые библиотеки все будут в С++ 11, но существующие пакеты boost будут храниться как доступные в течение некоторого времени, так как многие из них еще не переключились на компиляторы С++ 11. Я также предполагаю, что только функции С++ 11, которые реализуются всеми основными компиляторами, сначала войдут в пакет.

Это скорее вопрос программистов, чем stackoverflow, и даже лучше для comp.std.С++. Модифицированные и ускоряющие списки рассылки.