nestle libreria library drink descargar bebida c++ boost

c++ - libreria - descargar boost



¿Deberíamos preferir Boost o lib estándar? (5)

Estoy leyendo la documentación de la matriz Boost y veo esta línea:

Si está utilizando C ++ 11, debería considerar usar std :: array en lugar de boost :: array

Tenía la impresión de que Boost, por sus principales libs, siempre era preferible a la lib estándar porque:

  • impulso nunca tendrá un rendimiento peor que el estándar lib
  • impulso puede proporcionar más características
  • el impulso es al menos de la misma calidad que la biblioteca estándar (las personas que escriben el estándar C ++ son desarrolladores / supervisores de impulso activo)
  • Las principales características de impulso terminan en la biblioteca estándar unos años más tarde.

Entonces, ¿estoy en lo cierto al preferir el impulso sobre stdlib?

Si no / más complicado, ¿cuál de mis suposiciones se deben corregir?


Creo que deberías usar lib estándar cuando esté disponible porque ... es estándar y viene con el compilador. Además, si usas boost necesitas una dependencia externa molesta.

Por lo tanto, mi consejo es: usar std cuando sea posible. Si está escribiendo un código portátil, que también debe compilarse con compiladores antiguos, puede considerar usar su propio espacio de nombres (por ejemplo, cxx0x) que incrusta el espacio de nombres estándar o estándar de acuerdo con el compilador que está usando ):

#ifdef COMPILER_HAS_CXX0X #include <memory> namespace cxx0x = std; #else #include <boost/shared_ptr.hpp> namespace cxx0x = boost; #endif ... cxx0x::shared_ptr< MyClass > = ...


La tendencia que he visto en el software de código abierto desarrollado contra C ++ 11 es mover las características compatibles con API (subconjunto de) de STD a impulso, porque el impulso está disponible para compiladores no compatibles con C ++ 11 donde las características estándar son (obviamente) no.

Buen ejemplo de esto es mosh .

Para las características compatibles con API, es simplemente una cuestión de cambiar los espacios de nombres. De hecho, no hay razón para no convertirla en una opción de configuración, si puede.

Barra lateral: si está enlazando con la última versión de las bibliotecas de refuerzo que no son solo de encabezado, tenga en cuenta que ciertas características ya no estarán disponibles a menos que se compile el impulso con -std=c++11 . Me encontré con esto recientemente con ciertas funciones en la API boost::filesystem .


Por mi propia experiencia, prefiero usar boost por ahora. Tal vez es histórico, pero encontré que los intentos de ETS en TR1 que venían con VC2008 tenían demasiados errores, a pesar de los mejores esfuerzos de PJ Plauger, no pudo reproducir la calidad del código revisado y revisado por pares que había pasado Un poco de historia.

A menos que realmente puedan tomar el código de impulso y usarlo en STD, ¿por qué lo reproducirían mejor? Por supuesto, a veces pueden, y realmente deberían trabajar juntos en lugar de enfrentarse entre sí.

Sin embargo, una cosa que hago ahora es declarar un espacio de nombres de alias, generalmente llamado spns así:

namespace spns = boost;

después de lo cual puedo usar spns::shared_ptr todo mi código (spns significa "espacio de nombres de puntero compartido") y si alguna vez cambiamos a std más tarde, será fácil ir a un lugar y editar solo esa línea y la inclusión.

Cuando se trata de C ++ 11, hay cambios importantes en el Estándar y el código de boost es C ++ 03. Así que ahora es probable que las tablas giren para ciertas partes de la biblioteca. Reconozco que algunas de las excelentes bibliotecas de boost se volverán casi obsoletas para C ++ 11, por ejemplo, ya nadie usará boost::lambda , solo usarán la nueva sintaxis de lenguaje para un lambda.

Entonces, sí, cuando te mueves a C ++ 11, puede ser el momento de abandonar partes de la biblioteca boost y usar las nuevas versiones.


Si algo puede ser estándar, deja que sea estándar. Si algo no puede, use la solución lo más estándar posible (y BOOST está diseñado para eso)

Muchas características de la biblioteca estándar se toman de boost, que continúan existiendo para ser compatibles con la aplicación que se implementó cuando esas características aún no se habían estandarizado.

El uso de impulso para la característica estandarizada es, de hecho, un "mirar hacia atrás". En algún momento es necesario (puede ser que la implementación específica de la biblioteca estándar no incluya todo lo que se requiere ... es típico ver boost :: thread en lugar de std :: thread en windows debido a una implementación estándar que aún no ha sido portada por algunos compiladores) Pero no lo haría una regla.


Tomado de la gente Boost :

¿Por qué una organización debería usar Boost?

En una palabra, Productividad. El uso de bibliotecas de alta calidad como Boost acelera el desarrollo inicial, produce menos errores, reduce la reinvención de la rueda y reduce los costos de mantenimiento a largo plazo. Y como las bibliotecas Boost tienden a convertirse en estándares de facto o de jure, muchos programadores ya están familiarizados con ellos.

Diez de las bibliotecas Boost están incluidas en el TR1 de la biblioteca estándar de C ++ y, por lo tanto, están programadas para una posterior estandarización completa. Más bibliotecas Boost están en trámite para TR2. El uso de las bibliotecas Boost le da a una organización una ventaja en la adopción de nuevas tecnologías.

Muchas organizaciones ya utilizan programas implementados con Boost, como Adobe Acrobat Reader 7.0.