Proyecciones con Boost.HOF

La biblioteca header-only Boost.HOF [1], acrónimo de Higher Order Functions, constituye una útil herramienta de programación funcional en C++ que, como su nombre indica, opera con funciones de orden superior --es decir, funciones que toman otras funciones como entrada y/o que devuelven otra función como salida. La biblioteca proporciona múltiples utilidades para funciones y objetos función que buscan resolver de forma sencilla problemas que, tradicionalmente, han sido abarcados con técnicas de metaprogramación más complejas (piénsese, por ejemplo, en SFINAE).

En este post analizaremos la funcionalidad del adaptador de funciones proj [2], que aplica proyecciones unarias sobre los argumentos de otra función. Disponemos de dos sobrecargas en el espacio de nombres boost::hof:

   template<typename Projection, typename F>    constexpr auto proj(Projection p, F f) -> proj_adaptor<Projection, F>;    template<typename Projection>    constexpr auto proj(Projection p) -> proj_adaptor<Projection>;

donde se asume que el tipo F es ConstInvocable [3].

Programación concurrente (VIII): Ejercicio resuelto de paralelización

 Artículos de la serie:


Ejercicio resuelto de paralelización


Última actualización del artículo: 6 de septiembre de 2021.

Con el fin de poner en práctica algunas de las técnicas analizadas en los artículos anteriores de esta serie, nos plantearemos el problema de, dada la ruta (path) de un directorio/carpeta de archivos (directory), mostrar en consola:
  1. El número y tamaño total de los archivos contenidos en el directorio --incluyendo posibles subdirectorios--, desglosados por orden alfabético de extensión.
  2. El número total de subdirectorios.
Por supuesto, trataremos de aprovechar la concurrencia soportada por la implementación para acumular la información de forma rápida y eficiente.