Стандарт 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:

http://en.cppreference.com/w/cpp/utility/any

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

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

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

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

Вероятно, это больше вопрос для программистов, чем для stackru, а еще лучше для comp.std.C++., Модерируемых и улучшающих списки рассылки.

Другие вопросы по тегам