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;
}
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;
}
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.
¿Cómo califica esto como una respuesta? Este es un comentario. –
Esta respuesta pronto estará obsoleta. C++ 17 incluirá 'std :: variant', http://en.cppreference.com/w/cpp/utility/variant – TimZaman
@TimZaman: Gracias por el recordatorio. Agregué una edición para notar el soporte C++ 17. –
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.
¿Puede enumerar algunos de estos cambios? – einpoklum
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. –
¡std::variant
ahora oficialmente formará parte de la biblioteca estándar C++ 17! https://herbsutter.com/2016/06/30/trip-report-summer-iso-c-standards-meeting-oulu/
No lo hay, pero es muy probable que Boost.Variant esté en TR2. – ildjarn
Lamentablemente, la mayor parte del impulso aún no tiene el equivalente 'estándar'. –
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. –