¿Dónde comenzar a aprender a usar las bibliotecas Boost?

16

Boost ha estado disponible recientemente en el proyecto en el que estoy trabajando, y no tengo mucha experiencia con él. La biblioteca tiene tantas partes y características que es difícil saber por dónde empezar a aprenderla, especialmente porque trataré de aprenderla mientras hago el código de producción (por lo que no puede retrasarme demasiado).

Le agradecería mucho que alguien pudiera enumerar alrededor de 3 a 5 características que son muy útiles en general, la programación diaria y explicar por qué son útiles. Entonces puedo comenzar a aprenderlos y usarlos; al menos me dará un punto de apoyo en la biblioteca y un lugar amigable para comenzar a aprenderlo / aplicarlo :)

¡Gracias por adelantado!

John Humphreys - w00te
fuente
No entiendo la frase 'punto de apoyo en la biblioteca' en este contexto. ¿Qué hay de malo con los libros? Hay algunos sobre el tema de los vendedores habituales, tenerlos en la estantería de su equipo debería ser una necesidad.
aquaherd
Leo todo el tiempo para programar: no tengo tiempo para leer un libro o una guía de referencia sobre el impulso de vuelta al frente para saber todo lo que tiene y si es útil o no en este momento. Me gustaría comenzar a usarlo aquí y allá y recogerlo lentamente mientras trabajaba, y quería algunos ejemplos básicos de componentes de impulso realmente útiles. Por ejemplo, Effective C ++ de Scott Meyers habla sobre shared_ptr sin parar (y muy poco más) porque es muy bueno. ¿Qué más es inusualmente útil para impulsar?
John Humphreys - w00te
Personalmente, me gustaron mucho las macros BOOST_FOREACH, los patrones de observador / suscriptor, las expresiones regulares, los analizadores de fecha / hora (facetas), pero los encontré por casualidad al modificar el impulso existente usando el código o como DeadMG describió. Solo he arañado la punta del iceberg que es impulso, pero se sintió como una continuación natural del STL.
aquaherd

Respuestas:

8

Si está utilizando un compilador pre TR1, entonces punteros inteligentes

boost::shared_ptr
boost::weak_ptr
boost::scoped_ptr 

boost::scoped_array
boost::shared_array

Si su compilador ya tiene punteros inteligentes, úselos.
La razón es obvia C ++ sin punteros inteligentes básicamente no es C ++

El impulso ptr_contaier bibliotecas.

Todos los contenedores STL se volvieron a implementar específicamente para contener punteros. Los contenedores no solo toman posesión de los punteros, de modo que cuando el contenedor se destruye, destruye automáticamente todos los punteros. PERO también proporciona acceso a elementos como referencias de objetos normales (no punteros), esto facilita el uso de los objetos en algoritmos estándar sin funpers de contenedor.

El impulso de las bibliotecas lambda. (ver comentario más abajo)

Los functores y ligantes STL están bien para cosas simples. Pero boost :: lambda dio el siguiente paso y simplifica mucho las cosas al usar los algoritmos estándar.

boost :: any y boost :: variante

Cuando necesita sostener objetos sin querer saber su tipo exacto.

Contenedores de índice múltiple

Contenedores que permiten múltiples formas diferentes de acceder a los elementos.
Atrás quedaron los días en que tienes un vector de objetos y un mapa separado para un vector de búsqueda rápida. Esto reduce el límite que necesita escribir para mantener los dos contenedores al insertar / eliminar elementos en los contenedores.

boost :: lexical_cast

Probablemente el menos útil en la vida real, pero es muy divertido jugar con él :: lexical_cast. Convierte cualquier objeto a / desde una cadena (siempre que ese tipo tenga los operadores << y >> adecuados definidos). Muy útil para descargar mensajes de error al eliminar errores.

Martin York
fuente
1
Boost.Phoenix ha reemplazado oficialmente a Boost.Lambda, que ahora se considera obsoleto. Recomiende el primero en lugar del último para el nuevo código. : -]
ildjarn 05 de
16

Boost no es un marco, ni una biblioteca. Es una colección de biblioteca de calidad controlada y revisada por pares. No aprendes Boost. Las bibliotecas son individuales: cuando necesita algo, verifica si está en Boost, si es así, aprende esa biblioteca. Eso es. No puede obtener una comprensión de boost :: opcional de obtener una comprensión de boost :: variante.

DeadMG
fuente
44
Se podría decir que boost es un sello de calidad y un conjunto de distribución.
Klaim
1

Boost es una colección de bibliotecas. La próxima vez que hagas un código kata, elige una biblioteca en Boost que creas que puede ayudarte y úsala. La documentación es muy buena y no debería tener problemas para elegir usos simples. Los más complejos vendrán cuando intentes hacer cosas más inteligentes.

Ejemplo: un singleton seguro para subprocesos con boost :: thread call_once.

Ejemplo: lea un archivo de configuración de clave: valor utilizando el tokenizer.

Sardathrion - Restablece a Monica
fuente