Pregunta

Desde que comencé a usar este sitio, sigo escuchando sobre la biblioteca Boost.Me pregunto cuáles son algunos de los principales beneficios de la biblioteca Boost (por lo tanto, ¿por qué debería usarla) y qué tan portátil es la biblioteca Boost?

¿Fue útil?

Solución

Boost está organizado por varios miembros del comité estándar.
Por lo tanto, es un caldo de cultivo para las bibliotecas que estarán en el próximo estándar.

  1. Es una extensión del STL (llena los bits que quedan)
  2. Está bien documentado.
  3. Está bien revisado por pares.
  4. Tiene una gran actividad, por lo que los errores se encuentran y corrigen rápidamente.
  5. Es neutral en la plataforma y funciona en todas partes.
  6. Es de uso gratuito.

Con tr1 próximamente, es bueno saber que el impulso ya tiene mucho terreno cubierto. Muchas de las bibliotecas en tr1 están básicamente adaptadas directamente de los originales de impulso y, por lo tanto, se han probado y probado. La diferencia es que se han movido al espacio de nombres std :: tr1 (en lugar de aumentar).

Todo lo que necesita hacer es agregar lo siguiente a los compiladores predeterminados incluir ruta de búsqueda :

<boost-install-path>/boost/tr1/tr1

Luego, cuando incluye el impulso de encabezados estándar, importará automáticamente todo el material requerido en el espacio de nombres std :: tr1

Por ejemplo:

Para usar std :: tr1 :: share_ptr solo necesita incluir < memory > ;. Esto le dará todos los punteros inteligentes con un solo archivo.

Otros consejos

Simplemente puede leer la página Boost Background Information para obtener una descripción general rápida de por qué debería usar Impulso y para qué lo puedes usar. Vale la pena los pocos minutos que lleva.

99% portátil.

Diría que tiene bastantes bibliotecas que son realmente útiles una vez que descubres una necesidad que se resuelve con boost. O lo codifica usted mismo o usa una biblioteca muy sólida. Tener fuera de la fuente de almacenamiento para cosas como Multi-Index, Lambda, Opciones de programa, RegEx, SmartPtr y Tuple es increíble ...

Lo mejor es pasar un tiempo revisando la documentación de las diferentes bibliotecas y evaluando si podría serle útil.

¡Digno!

Obtienes muchas de las cosas que vienen en C ++ 0x. Pero aparte de esa generalidad, algunos de los mejores detalles son una simple biblioteca de expresiones regulares , una biblioteca de conversión para transmisión de cadenas a ints (Reparto léxico):

int iResult = 0;
try
{
    iResult = lexical_cast<int>("4");
}
catch(bad_lexical_cast &)
{
    cout << "Unable to cast string to int";
}

A biblioteca de fecha / hora , entre otros ...

using namespace boost::gregorian;
date weekstart(2002,Feb,1);
date thursday_next = next_weekday(weekstart, Thursday); // following Thursday

También hay una interfaz Python (Boost Python), un lexer / parser DSL (Boost Spirit):

// A grammar in C++ for equations
group       = '(' >> expression >> ')';
factor      = integer | group;
term        = factor >> *(('*' >> factor) | ('/' >> factor));
expression  = term >> *(('+' >> term) | ('-' >> term));

y eso es solo rascar la superficie ...

Boost es genial, pero solo jugando a Devil's Advocate aquí hay algunas razones por las cuales no querrás usar Boost:

  • Algunas veces no se compila / funciona correctamente en compiladores antiguos.
  • A menudo aumenta los tiempos de compilación más que los enfoques con menos plantillas.
  • Es posible que algunos códigos Boost no hagan lo que usted cree que hace. ¡Lea la documentación!
  • El abuso de plantillas puede generar mensajes de error ilegibles.
  • El abuso de plantillas puede hacer que el código sea difícil de leer en el depurador.
  • Es el borde sangrante C ++. Es posible que la próxima versión de Boost ya no compile en su compilador actual (más antiguo).

Todo esto no significa que no deba echar un vistazo al código Boost y obtener algunas ideas usted mismo, incluso si no usa Boost tal como está.

Boost es una colección de bibliotecas C ++. 10 de los cuales se incluyen en tr1 de C ++ 0x.

Puede comenzar a impulsar aquí .

Boost es una colección de bibliotecas C ++ de alta calidad revisadas por pares que ponen énfasis en la portabilidad y la corrección. Actúa como base de pruebas de facto para nuevas incorporaciones al lenguaje y la biblioteca estándar. Visite su sitio web para más detalles.

Ventajas de Boost: Está ampliamente disponible, se transferirá a cualquier compilador de C ++ moderno o sobre cualquier plataforma.
Las funciones son independientes de la plataforma, no tiene que aprender un nuevo diseño de hilo para cada nuevo marco.
Encapsula muchas funciones específicas de la plataforma, como los sistemas de archivos de una manera estándar.

¡Es lo que C ++ debería haber enviado! Gran parte de la popularidad de Java fue que viene con una biblioteca estándar para hacer todo lo que quisieras. Desafortunadamente, C ++ solo heredó las funciones estándar limitadas de C / Unix.

shared_ptr y weak_ptr, especialmente en código multiproceso, solo vale la pena instalar boost. BOOST_STATIC_ASSERT También es genial para realizar comprobaciones lógicas en tiempo de compilación.

El hecho de que muchas de las clases y utilidades de boost estén en encabezados, lo que significa que puedes obtener muchas funciones sin tener que compilar nada en absoluto, también es una ventaja.La portabilidad generalmente no es un problema, a menos que uses un compilador extremadamente antiguo.Una vez intenté que MPL funcionara con VC6 e imprimió 40.000 advertencias/errores internos antes de explotar por completo.Pero, en general, la mayor parte de la biblioteca debería funcionar independientemente de su plataforma o proveedor de compilador.

Tenga en cuenta el hecho de que bastantes cosas de Boost ya están en TR1 y muy probablemente estarán en la próxima revisión de la biblioteca estándar de C++.Ese es un respaldo bastante grande.

Boost es una biblioteca muy extensa de construcciones genéricas (generalmente) que pueden ayudar en casi cualquier aplicación. Esto se puede demostrar por el hecho de que se han incluido muchos componentes de refuerzo en las especificaciones de C ++ 0x.

También es portátil en al menos las plataformas principales, y debería ser portátil para casi cualquier cosa con un compilador de C ++ que cumpla en su mayoría con los estándares.

La única advertencia es que puede haber muchas dependencias mezcladas entre las bibliotecas de impulso, lo que hace que sea más difícil elegir solo un componente específico para distribuir (aparte de toda la biblioteca de impulso).

Todo lo anterior, además de que fomenta muchas técnicas modernas de C ++ con las mejores prácticas. Tiende a mejorar la calidad de su código.

También tenga en cuenta que la mayor parte del impulso son plantillas, por lo que no requiere creación
(solo incluya los archivos de encabezado correctos).

Las pocas partes que requieren construcción son opcionales:
Cada uno de ellos se puede construir de forma independiente, evitando así la hinchazón innecesaria de código innecesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top