Я ищу альтернативу объединению в стиле C. boost :: variant - один из таких вариантов. Есть что-нибудь в std C++?Что эквивалентно boost :: variant в стандартной библиотеке C++?
union {
int i;
double d;
}
Я ищу альтернативу объединению в стиле C. boost :: variant - один из таких вариантов. Есть что-нибудь в std C++?Что эквивалентно boost :: variant в стандартной библиотеке C++?
union {
int i;
double d;
}
Как отметили несколько комментаторов: Нет, в стандартном C++ отсутствует вариант Boost Variant. Может быть, через несколько лет будет, но зачем ждать - используйте Boost Variant сегодня!
Edit (четыре года спустя, 2016): В C++ 17 будет std::variant
. Аналогичный, но не идентичный boost::variant
. Поэтому, когда ваш компилятор поддерживает C++ 17, у вас будет решение в стандартной библиотеке.
Как это квалифицируется как ответ? Это комментарий. –
Этот ответ скоро будет устаревшим. C++ 17 будет включать в себя 'std :: variant', http://en.cppreference.com/w/cpp/utility/variant – TimZaman
@TimZaman: Спасибо за напоминание. Я добавил редактирование, чтобы отметить поддержку C++ 17. –
Прошло несколько лет: сейчас a proposal находится в пути. Возможно, boost::variant
сделает это на C++ 17! До тех пор нам придется жить с boost::variant
, который по-прежнему потрясающий. Обратите внимание, что в деталях будут внесены некоторые изменения в std::variant
.
ОБНОВЛЕНИЕ: Предложение сделало это. std::variant
будет частью нового стандарта C++ 17. Вот June 2016 meeting report by Herb Sutter. Там он подтверждает это.
Можете ли вы перечислить некоторые из этих изменений? – einpoklum
Изменения по-прежнему могут быть изменены. ;) Некоторые изменения противоречивы. Кроме того, это скорее не на поверхности, а есть некоторые сложные проектные решения. Чтобы не усложнять ответ без необходимости, я решил быть кратким и точным. Некоторые из проблем можно найти в ссылке на предложение в моем ответе. –
std::variant
теперь официально станет частью стандартной библиотеки C++ 17! https://herbsutter.com/2016/06/30/trip-report-summer-iso-c-standards-meeting-oulu/
Нет, но Boost.Variant, скорее всего, будет в TR2. – ildjarn
К сожалению, большая часть boost не имеет эквивалента 'std'. –
Ничего плохого в использовании Boost. Весь смысл C++ заключается в том, что он позволяет писать библиотеки, которые делают полезные вещи. Он не пытается обеспечить все из коробки, но, скорее, он дает вам инструменты, чтобы * сделать * все, что вам нужно. Используйте Boost. –