2012-03-22 3 views
13

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

union { 
    int i; 
    double d; 
} 
+1

Нет, но Boost.Variant, скорее всего, будет в TR2. – ildjarn

+1

К сожалению, большая часть boost не имеет эквивалента 'std'. –

+9

Ничего плохого в использовании Boost. Весь смысл C++ заключается в том, что он позволяет писать библиотеки, которые делают полезные вещи. Он не пытается обеспечить все из коробки, но, скорее, он дает вам инструменты, чтобы * сделать * все, что вам нужно. Используйте Boost. –

ответ

24

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


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

+0

Как это квалифицируется как ответ? Это комментарий. –

+0

Этот ответ скоро будет устаревшим. C++ 17 будет включать в себя 'std :: variant', http://en.cppreference.com/w/cpp/utility/variant – TimZaman

+0

@TimZaman: Спасибо за напоминание. Я добавил редактирование, чтобы отметить поддержку C++ 17. –

10

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

ОБНОВЛЕНИЕ: Предложение сделало это. std::variant будет частью нового стандарта C++ 17. Вот June 2016 meeting report by Herb Sutter. Там он подтверждает это.

+0

Можете ли вы перечислить некоторые из этих изменений? – einpoklum

+0

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

Смежные вопросы