2012-03-22 7 views
13

Estoy buscando una alternativa a la unión C-style. boost :: variant es una de esas opciones. ¿Hay algo en la norma C++?¿Cuál es el equivalente de boost :: variant en la biblioteca estándar de C++?

union { 
    int i; 
    double d; 
} 
+1

No lo hay, pero es muy probable que Boost.Variant esté en TR2. – ildjarn

+1

Lamentablemente, la mayor parte del impulso aún no tiene el equivalente 'estándar'. –

+9

Nada de malo con el uso de Boost. El objetivo de C++ es que te permite escribir bibliotecas que hacen cosas útiles. No trata de proporcionar todo de la caja, sino que le brinda las herramientas para * hacer * todo lo que necesita. Use Boost. –

Respuesta

24

Como dijeron varios comentaristas: No, no hay variantes de Boost en el estándar C++. Tal vez en unos pocos años habrá, pero ¿por qué esperar? ¡Utiliza la variante Boost hoy mismo!


Edit (cuatro años después, 2016): En C++ 17 habrá std::variant. Similar pero no idéntico a boost::variant. Entonces, cuando su compilador sea compatible con C++ 17, tendrá una solución en la biblioteca estándar.

+0

¿Cómo califica esto como una respuesta? Este es un comentario. –

+0

Esta respuesta pronto estará obsoleta. C++ 17 incluirá 'std :: variant', http://en.cppreference.com/w/cpp/utility/variant – TimZaman

+0

@TimZaman: Gracias por el recordatorio. Agregué una edición para notar el soporte C++ 17. –

10

Pasaron algunos años: ahora a proposal está en camino. ¡Posiblemente boost::variant lo convertirá en C++ 17! Hasta entonces tendremos que vivir con boost::variant que aún es impresionante. Tenga en cuenta que habrá algunos cambios en los detalles en std::variant.

ACTUALIZACIÓN: La propuesta lo hizo. std::variant formará parte del nuevo estándar C++ 17. Aquí está el June 2016 meeting report by Herb Sutter. Ahí lo confirma.

+0

¿Puede enumerar algunos de estos cambios? – einpoklum

+0

Los cambios aún están sujetos a cambios. ;) Algunos cambios son controvertidos. Además, no está en la superficie, pero hay algunas decisiones de diseño complicadas. Para no complicar innecesariamente la respuesta, elegí ser conciso y directo. Algunos de los problemas se pueden encontrar en el enlace a la propuesta en mi respuesta. –

Cuestiones relacionadas