Стандарт C ++ 11 обеспечивает что-то вроде boost :: any? - PullRequest
19 голосов
/ 08 февраля 2012

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

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

Ответы [ 4 ]

16 голосов
/ 09 июня 2015

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

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

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

15 голосов
/ 08 февраля 2012

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

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

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

4 голосов
/ 12 октября 2016

Std :: any недавно был принят в стандарт c ++ 17:

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

3 голосов
/ 08 февраля 2012

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

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

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

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

Это, вероятно, больше вопрос для программистов, чем stackoverflow, и даже лучше для компа.std.c ++. модерируется и расширяет списки рассылки.

...