2012-03-22 25 views
13

Poszukuję alternatywy dla unii w stylu C. boost :: variant jest jedną z takich opcji. Czy jest coś w standardowym C++?Jaki jest odpowiednik opcji boost :: variant w bibliotece standardowej C++?

union { 
    int i; 
    double d; 
} 
+1

Nie ma, ale Boost.Variant najprawdopodobniej znajduje się w TR2. – ildjarn

+1

Niestety, większość boostów nie ma jeszcze odpowiednika "std". –

+9

Nic złego w korzystaniu z funkcji Zwiększ. Cała sprawa C++ polega na tym, że pozwala pisać biblioteki, które wykonują użyteczne rzeczy. Nie stara się dostarczyć wszystkiego od razu po wyjęciu z pudełka, ale raczej daje narzędzia do * robienia * wszystkiego, czego potrzebujesz. Użyj wzmocnienia. –

Odpowiedz

24

Ponieważ kilka komentujących powiedział: Nie, nie ma doładowania Variant-zarówno w standardowej C++. Może za kilka lat będzie, ale po co czekać - skorzystaj już z Boost Variant!


Edit (cztery lata później, 2016): w C++ 17 będzie std::variant. Podobne, ale nie identyczne z boost::variant. Więc kiedy twój kompilator obsługuje C++ 17, będziesz miał rozwiązanie w standardowej bibliotece.

+0

Jak to się kwalifikuje jako odpowiedź? To jest komentarz. –

+0

Ta odpowiedź wkrótce będzie nieaktualna. C++ 17 będzie zawierało 'std :: variant', http://en.cppreference.com/w/cpp/utility/variant – TimZaman

+0

@TimZaman: Dzięki za przypomnienie. Dodałem edycję, aby zauważyć obsługę C++ 17. –

10

Minęło kilka lat: teraz a proposal jest w drodze. Prawdopodobnie boost::variant zmieni się w C++ 17! Do tego czasu będziemy musieli żyć z boost::variant, która jest wciąż niesamowita. Zauważ, że będą pewne zmiany w szczegółach w std::variant.

AKTUALIZACJA: Wniosek złożył. std::variant będzie częścią nowego standardu C++ 17. Oto June 2016 meeting report by Herb Sutter. Tam to potwierdza.

+0

Czy możesz wymienić niektóre z tych zmian? – einpoklum

+0

Zmiany mogą ulec zmianie. ;) Niektóre zmiany są kontrowersyjne. Również nie jest na powierzchni, ale są pewne skomplikowane decyzje projektowe. Aby niepotrzebnie nie komplikować odpowiedzi, postanowiłem być zwięzły i rzeczowy. Niektóre problemy można znaleźć w linku do wniosku w mojej odpowiedzi. –