Что эквивалентно boost :: variant в стандартной библиотеке C ++?

Ищу альтернативу соединению в стиле C. boost :: variant - одна из таких опций. Есть ли что-нибудь в std C ++?

union {
   int i;
   double d;
}

person cached    schedule 22.03.2012    source источник
comment
Нет, но Boost.Variant, скорее всего, будет в TR2.   -  person ildjarn    schedule 23.03.2012
comment
К сожалению, у большей части буста еще нет std эквивалента.   -  person Mooing Duck    schedule 23.03.2012
comment
Нет ничего плохого в использовании Boost. Вся суть C ++ в том, что он позволяет писать библиотеки, которые делают полезные вещи. Он не пытается предоставить все "из коробки", а, скорее, дает вам инструменты для создания всего, что вам нужно. Используйте Boost.   -  person Kerrek SB    schedule 23.03.2012
comment
Обратите внимание, что boost::variant - это библиотека только для заголовков, поэтому вам не нужно беспокоиться о создании / связывании библиотеки Boost, если вы используете только boost::variant. Просто убедитесь, что путь к файлам заголовков boost включен в ваш проект / IDE / makefile.   -  person Emile Cormier    schedule 23.03.2012
comment
@ildjarn: Был ли Boost.Variant предложен комитету? Я не припомню, чтобы видел газету в последней рассылке.   -  person Nicol Bolas    schedule 23.03.2012
comment
@ildjarn Звучит слишком оптимистично. Если я правильно помню, по крайней мере boost::optional был отправлен один раз, и из этого ничего не вышло.   -  person pmr    schedule 29.03.2012
comment
Немного некропоста, но теперь, когда у C ++ есть неограниченные объединения, boost::variant даже понадобится ли?   -  person Evan Teran    schedule 29.08.2014
comment
@EvanTeran - неограниченные союзы могут упростить реализацию вариантного типа, но они не заменяют их.   -  person Ferruccio    schedule 19.12.2014


Ответы (3)


Как сказали несколько комментаторов: Нет, в стандартном C ++ нет подобного варианта Boost. Может быть, через несколько лет так и будет, но зачем ждать - используйте Boost Variant уже сегодня!


Изменить (четыре года спустя, 2016 г.): В C ++ 17 будет std::variant. Подобен boost::variant, но не идентичен ему. Итак, когда ваш компилятор поддерживает C ++ 17, у вас будет решение в стандартной библиотеке.

person John Zwinck    schedule 22.03.2012
comment
Как это квалифицируется как ответ? Это комментарий. - person Brett Hale; 15.07.2016
comment
Этот ответ действительно скоро устареет. C ++ 17 будет включать std::variant, en.cppreference.com/w/cpp/utility/ вариант - person TimZaman; 07.08.2016
comment
@TimZaman: Спасибо за напоминание. Я добавил правку, чтобы отметить поддержку C ++ 17. - person John Zwinck; 07.08.2016
comment
@JohnZwinck: Я был бы рад, если бы вы могли взглянуть на вопрос, который я только что задал после вашего ответа: В чем разница между std :: variant и boost :: variant? - person einpoklum; 23.10.2016

Прошло несколько лет: теперь предложение уже в пути. Возможно boost::variant попадет в C ++ 17! А пока нам придется жить с boost::variant, что по-прежнему круто. Обратите внимание, что в std::variant будут некоторые изменения в деталях.

ОБНОВЛЕНИЕ: предложение внесено. std::variant будет частью нового стандарта C ++ 17. Вот отчет Херба о встрече за июнь 2016 г. Саттер. Там он это подтверждает.

person Ralph Tandetzky    schedule 11.12.2015
comment
Вы можете перечислить некоторые из этих изменений? - person einpoklum; 08.04.2016
comment
Изменения могут быть изменены. ;) Некоторые изменения спорны. Тоже это скорее не на поверхности, но есть несколько сложных дизайнерских решений. Чтобы без надобности не усложнять ответ, я предпочел быть кратким и по существу. Некоторые из проблем можно найти по ссылке на предложение в моем ответе. - person Ralph Tandetzky; 11.04.2016

std::variant теперь официально станет частью стандартной библиотеки C ++ 17! https://herbsutter.com/2016/06/30/trip-report-summer-iso-c-standards-meeting-oulu/

person Curious    schedule 07.07.2016