Puse mis habilidades en C ++ en el estante hace varios años y parece que ahora, cuando las necesito nuevamente, el panorama ha cambiado.
Tenemos C ++ 11 ahora, y entiendo que se superpone a muchas características de Boost.
¿Hay algún resumen de dónde se encuentran esas superposiciones, qué bibliotecas de Boost se convertirán en heredadas, la recomendación de qué características de C ++ 11 usar en lugar de impulsar y cuáles mejor no?
Respuestas:
Reemplazable por funciones o bibliotecas de lenguaje C ++ 11
<cmath>
, vea la lista a continuaciónlog1p
,expm1
cbrt
,hypot
acosh
`asinh
`atanh
TR1 (están marcados en la documentación si son bibliotecas TR1)
Características portadas desde C ++ 11:
Reemplazable por las características del lenguaje C ++ 17:
<cmath>
( Matemáticas especiales IS ), vea la lista a continuaciónEl equipo estándar todavía está trabajando en ello:
Una gran parte de MPL se puede recortar o eliminar usando plantillas variadas. Algunos casos de uso común de fundición léxico pueden ser reemplazados 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, Boost.Chrono tiene E / S y redondeo y muchos otros relojes, etc., por lo que es posible que desee echar un vistazo a los impulsores antes de descartarlos realmente.
fuente
std::unique_ptr
sea parte de TR1 (ya que requiere semántica de movimiento)En realidad, no creo que las bibliotecas de impulso se conviertan en legado.
Sí, usted debería ser capaz de utilizar
std::type_traits
,regex
,shared_ptr
,unique_ptr
,tuple<>
,std::tie
,std::begin
en lugar de Typetraits Boost / Utilidad, Boost SmartPointer, Boost Tuple, Boost bibliotecas Range, pero no debe ser en la práctica hay necesidad real de 'interruptor' a menos que se están moviendo más de su código para c ++ 11.Además, en mi experiencia, las
std
versiones de la mayoría de estas son algo menos características. Por ejemplo, AFAICT el estándar no tienebool boost::basic_regex<>::empty()
) y otras diferencias de interfazPerezoso, expresión lambdas basada en plantillas; tienen beneficios inevitables, ya que pueden ser polimórficos hoy , a diferencia de C ++ 11. Por lo tanto, a menudo pueden ser más concisos:
Definitivamente, esto todavía tiene cierto atractivo sobre C ++ 11 lambdas (con tipos de retorno finales, captura explícita y parámetros declarados).
Además, Boost tiene una función GRANDE, precisamente al facilitar la migración por ruta de C ++ 03 a C ++ 11 e integrar las bases de código de C ++ 11 y C ++ 03. Estoy pensando particularmente en
boost::result_of<>
y relacionado)Solo mis $ 0.02
fuente