para library biblioteca c++ boost c++11

c++ - biblioteca - boost library ubuntu



¿Qué funciones de Boost se superponen con C++ 11? (2)

Puse mis habilidades en C ++ en el estante hace varios años y parece que ahora, cuando los necesito de nuevo, el paisaje ha cambiado.

Ahora tenemos C ++ 11, y tengo entendido que se superpone a muchas funciones de Boost.

¿Hay algún resumen donde se encuentran esas superposiciones, qué bibliotecas de Boost se convertirán en legado, recomendación de qué características de C ++ 11 usar en lugar de las de refuerzo y cuál es mejor que no?


En realidad, no creo que las bibliotecas de impulso se conviertan en legado.

Sí, debería poder usar std::type_traits , regex , shared_ptr , unique_ptr , tuple<> , std::tie , std::begin lugar de Boost Typetraits / Utility, Boost Smartpointer, Boost Tuple, Boost Range libraries, pero en la práctica, no debería haber ninguna necesidad real de ''cambiar'' a menos que esté moviendo más de su código a c ++ 11.

Además, en mi experiencia, las versiones std de la mayoría de estos son algo menos funcional. Por ejemplo, AFAICT el estándar no tiene

  • Perl5 expresiones regulares
  • call_traits
  • Ciertos miembros de interfaz regex (como bool boost::basic_regex<>::empty() ) y otras diferencias de interfaz
    • esto pica más ya que la interfaz de Boost coincide exactamente con Boost Xpressive
    • y juega mucho mejor con Algoritmos Boost String. Obviamente, estos últimos no tienen contrapartidas estándar (¿todavía?)
  • Muchas cosas relacionadas con TMP (Boost Fusion)
  • Lazy, expresión basada en plantillas lambdas; tienen beneficios inevitables en el sentido de que pueden ser polimórficos en la actualidad , a diferencia de C ++ 11. Por lo tanto, a menudo pueden ser más sucintos:

    std::vector<int> v = {1,2,-9,3}; for (auto i : v | filtered(_arg1 >=0)) std::cout << i << "/n"; // or: boost::for_each(v, std::cout << _arg1);

    Definitivamente, esto todavía tiene cierto atractivo sobre C ++ 11 lambdas (con tipos de retorno final, captura explícita y parámetros declarados).

Además, hay una función GRANDE para Boost, precisamente para facilitar la migración de C ++ 03 a C ++ 11 e integrar bases de código C ++ 11 y C ++ 03. Estoy particularmente pensando en

  • Boost Auto (BOOST_AUTO)
  • Boost Utility ( boost::result_of<> y relacionado)
  • Boost Foreach (BOOST_FOREACH)
  • No olvide: Boost Move, que permite escribir clases con semántica de movimiento con una sintaxis que se compilará igualmente bien en los compiladores C ++ 03 con los compiladores Boost 1_48 + y C ++ 11.

Solo mi $ 0.02


Reemplazable por las características del lenguaje C ++ 11 o bibliotecas

TR1 (están marcados en la documentation si son bibliotecas TR1)

Características respaldadas desde C ++ 11:

  • Atomic ← std :: atomic
  • Chrono ← <crono> (ver abajo)
  • Move ← Referencias de valores

Reemplazable por las características del lenguaje C ++ 17:

  • String_ref → std :: string_view
  • Filesystem<filesystem> (sistema de archivos TS)
  • Optional → std :: opcional ( Fundamentos de la Biblioteca TS v1 )
  • Any → std :: any (Fundamentos de la biblioteca TS v1)
  • Matemáticas / Funciones especiales<cmath> ( Special Math IS ), consulte la lista a continuación
    • función beta
    • (normal / asociado / esférico) polinomios de Legendre
    • (normal / asociado) polinomios de Legendre
    • Polinomios de Hermite
    • Funciones de Bessel (J / Y / I / K) (Y se llama función de Neumann en C ++)
    • funciones esféricas de Bessel (j / y)
    • integrales elípticas (incompletas / completas) de (primer / segundo / tercer tipo)
    • Función zeta de Riemann
    • Ei integral exponencial
  • VariantP0088R2 :: variante ( P0088R2 )

El equipo estándar todavía está trabajando en ello:

Una gran parte de MPL se puede recortar o eliminar utilizando plantillas variadic. Algunos casos de uso común de yeso léxico se pueden reemplazar por std :: to_string y std :: sto X.

Algunas bibliotecas de Boost están relacionadas con C ++ 11 pero también tienen algunas extensiones más, por ejemplo, Boost.Functional/Hash contiene hash_combine y funciones relacionadas que no se encuentran en C ++ 11, Chrono tiene E / S y redondeo y muchos otros relojes, etc. por lo que es posible que aún desee echar un vistazo a los impulsores antes de realmente descartarlos.