Cuando lo descubrí boost::lexical_cast
, pensé para mis adentros "¿por qué no me enteré de esto antes?" - Odiaba tener que escribir código como
stringstream ss;
ss << anIntVal;
mystring = ss.str();
Ahora escribo
mystring = boost::lexical_cast<string>(anIntVal);
Ayer, en stackoverflow, me encontré con boost split (otra joya que me ahorrará escribir código).
string stringtobesplit = "AA/BB-CC")
vector<string> tokens;
boost::split(tokens, stringtobesplit, boost::is_any_of("/-"));
// tokens now holds 3 items: AA BB CC
Voy a comenzar a revisar la documentación de boost en busca de otras funciones que pueda usar regularmente, pero creo que será muy fácil pasar por alto cosas.
¿Qué funciones de refuerzo usa más / odiaría no tener?
Respuestas:
Probablemente la parte más utilizada de boost para mí es boost :: shared_ptr .
fuente
std::shared_ptr
ystd::unique_ptr
.BOOST_FOREACH vuelve a hacer que la vida valga la pena.
(¿Por qué nadie ha mencionado esto? ¡La pregunta se hizo hace 8 meses!)
fuente
Mis favoritos son, sin ningún orden en particular:
Boost fue una gran ayuda cuando escribí mi primera aplicación multiplataforma; sin ella, realmente habría tenido problemas.
fuente
Me gusta cómo puede proporcionar su propio destructor
shared_ptr
.Esto significa, por ejemplo, que puede usarlo con
FILE*
y hacer que cierre el archivo por usted.p.ej
fuente
NULL
es inútil, ya que asigna el parámetro de función local. :)Nadie ha mencionado los contenedores de índices múltiples, así que intervendré más tarde. No es tan frecuente que los necesite, pero sin un impulso es un verdadero dolor crear una estructura de datos equivalente, además de ser menos eficiente. Los he estado usando mucho recientemente para crear contenedores que buscan 2 claves.
fuente
Me sorprende que nadie lo haya mencionado
boost::optional
. Me encuentro usándolo con más frecuencia que cualquier parte de Boost exceptoshared_ptr
yscoped_ptr
.fuente
std::experimental::optional
y pronto (¿C ++ 17?) Comostd::optional
.Nadie menciona boost :: tuple? ¡Para vergüenza!
fuente
std::tuple
.BOOST_STATIC_ASSERT
Actualización (octubre de 2011): C ++ 11 (C ++ 0x) tiene
static_assert
http://www2.research.att.com/~bs/C++0xFAQ.html#static_assertfuente
Uno de mis más utilizados no es en Boost propiamente dicho, sino en las bibliotecas de origen de Adobe (ASL) creadas sobre Boost, específicamente, las extensiones de los algoritmos estándar que aceptan un boost :: rango en lugar de iteradores de inicio / fin separados. Entonces, en lugar de llamar, di:
Simplemente puedo decir
(Espero que estas partes de ASL migren eventualmente a Boost).
fuente
Yo uso mucho:
Otros como Tuple, Static Assert y Integer son muy útiles si está escribiendo una biblioteca que se utilizará en una variedad de plataformas.
Cosas como Graphs y Lambda son más específicas.
fuente
boost::shared_ptr
es un requisito para la programación moderna de C ++ en mi humilde opinión. Por eso lo agregaron al estándar con TR1.boost::program_options
,boost::bind
yboost::signal
son realmente agradables si sabes para qué sirven y cómo usarlos. Sin embargo, los dos últimos tienden a asustar a los recién llegados.fuente
Hemos encontrado que boost :: spirit es bastante útil para una solución empresarial para analizar ECMAScript. Complejo, pero muy bonito.
fuente
Me sorprende no ver todavía entre las respuestas Boost.Thread .
fuente
std::thread
.He estado usando shared_ptr durante años. Es tan útil que no hay razón por la que un proyecto deba estar sin él.
Además de eso, también uso Bind / Function / Lambda para mecanismos de devolución de llamada genéricos, especialmente útiles cuando se realizan pruebas, así como Format para mi reemplazo de sprintf de propósito general.
Finalmente, fue solo el otro día cuando usé Variant con ira para resolver un problema (un analizador que podía responder con un conjunto pequeño y fijo de tipos de tokens no relacionados). La solución fue muy elegante y estoy muy contento con ella.
Han pasado los años y los tiempos han cambiado, así que es hora de actualizar. SharedPtr y Function ahora forman parte del estándar, y Bind y Lambda están obsoletos debido a la funcionalidad lambda real a nivel de lenguaje.
Todavía uso Variant (que también se ha estandarizado, pero aún no he llegado allí), Format se reemplaza en gran medida por fmtlib (que también se ha estandarizado).
La gran parte de Boost que uso es Boost.Asio. Que está en proceso de estandarización.
fuente
Usando tuplas para iterar un mapa, como este:
Usando boost asignar, puedo inicializar un mapa como este:
Y usando adaptadores de rango y el operador de tubería ("|") puedo iterar hacia atrás sobre los valores de un mapa (como ejemplo):
fuente
Debería comprobar boost :: program_options. Hace que el análisis de la línea de comandos sea mucho más fácil.
fuente
Yo uso Boost Pointer Containers en lugar de un contenedor STL de
shared_ptr
s.fuente
Yo uso bastante boost :: numeric :: ublas :: matrix .
fuente
Me encanta boost :: random y boost :: asio y boost :: filesystem, sin embargo boost :: bind, boost :: circular_buffer y boost :: thread son muy prácticos, los punteros inteligentes están bien, pero prefiero RAII como administración de memoria
fuente
De acuerdo, aquí hay uno nuevo que encontré: en
lugar de usar stricmp , puedo usar la función igual de boost y pasar el predicado is_iequal,
por ejemplo: en
lugar de
Puedo usar
dado:
fuente
Aquí están mis dos centavos:
fuente
Utilizo
boost::icl
bastante para el posprocesamiento de texto. Me ahorré bastante tiempo porque de lo contrario tendría que implementar la división de texto yo mismo ...BOOST_FOREACH
está en todas partes en mi código :)boost::function
yboost::bind
son una necesidad absoluta. Aunque ahora sonstd::function
ystd::bind
. Estos realmente ayudan a reducir la cantidad de código innecesario y generalmente son buenos para mis diseños (o mis delirios).Recientemente comencé a usar
boost::interprocess::message_queue
y esta también es una gran herramienta.Usaría mucho más, pero Qt tiene formas nativas de hacer muchas cosas que hace Boost. Si alguna vez tuviera que programar en C ++ puro, supongo que me convertiría en
boost::junkie
:)fuente
Lo que más uso ahora está disponible en el TR1:
Ahora también uso clases de pool y algunas otras cosas más específicas.
Ahora comprende que Boost está destinado a ser útil para la mayoría de los programadores, por eso es el banco de pruebas para la futura biblioteca estándar.
fuente
Hablando de boost :: lexical_cast, ¿por qué algo como 'formato' no es un miembro estático en la biblioteca std :: string?
Casi todas las gui libs tienen algo como CString :: Format ("% i") o QString :: Number ("% i") que devuelven una cadena inicializada.
fuente
std::string = boost::format("Hello, %1% %2%") % "world" % "!!!").str();
Creo que la pregunta debería invertirse. ¿Qué parte de ti impulso no querrías? usar?
En mi experiencia, casi todo es interesante y útil en cada dominio del problema.
Debería dedicar tiempo a buscar en toda la documentación de impulso para encontrar las áreas que cubren sus intereses.
Una excepción puede ser
boost::numeric::ublas
cuál hace su trabajo, pero Eigen lo hace notablemente mejor.fuente