Invocación inmediata de lambdas (técnica IIFE)

Introducción


En este post describiremos la técnica para realizar inicializaciones locales complejas recomendada por los C++ Core Guidelines. Hablamos aquí de aquellas inicializaciones que involucran típicamente la creación de objetos auxiliares y/o el empleo de sentencias de control. Nos referiremos a dicho procedimiento como IIFE (Immediately-invoked function expression) por su semejanza con la solución idiomática del mismo nombre utilizada en JavaScript.

En el contexto de C++, algunas fuentes prefieren el término IILE (Immediately-invoked lambda expression), dado que la técnica descansa en el empleo de expresiones lambda. Como comprobaremos a continuación, este procedimiento es particularmente útil a la hora de inicializar objetos que deban ser declarados constantes. Para más información, puedes consultar: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-lambda-init

Range-v3: Una introducción a la biblioteca (Parte III)


En este post proporcionaremos dos nuevos ejemplos de programación con la biblioteca Range-v3, un subconjunto de la cual ha sido adoptada por el nuevo estándar del lenguaje C++20. Pueden consultarse los espacios de nombres utilizados por este artículo en el primer post de la serie.

Range-v3: Una introducción a la biblioteca (Parte II)


En este post proporcionaremos dos nuevos ejemplos de programación con la biblioteca Range-v3, un subconjunto de la cual ha sido adoptada por el nuevo estándar del lenguaje C++20. Pueden consultarse los espacios de nombres utilizados por este artículo en el primer post de la serie.

Range-v3: Una introducción a la biblioteca (Parte I)

Última actualización: 31 de octubre de 2021

Artículos de la serie:


Introducción


La biblioteca header-only Range-v3, desarrollada por Eric Niebler (Facebook), permite la programación con rangos en C++14/17/20 a través de un estilo esencialmente funcional, extensible y de fácil composición [1, 2]. Su excelente acogida en la comunidad de desarrolladores en C++ ha conducido a que parte de la funcionalidad de esta biblioteca haya sido adoptada por el nuevo estándar del lenguaje ISO C++20 [3], a la espera de seguir ampliando su soporte en C++23 [4].