Un ejemplo de programación con std::variant

Última actualización: 5 de agosto de 2020

Introducción


La plantilla std::variant<>, incluida por vez primera en el estándar C++17 en el fichero de cabecera <variant>, proporciona la funcionalidad típica de las uniones de C, si bien garantizando la seguridad de tipos. Así, una instancia de tipo variante std::variant contendrá, en un instante dado, un objeto perteneciente a uno de varios tipos alternativos permitidos, o ningún valor en caso de error. Por ejemplo, una instancia de std::variant<char, int, double> podrá contener un carácter char, un entero int o un double, a conveniencia del programador y sin incurrir en alojamiento dinámico de memoria:

VSCode como editor de C++

Nota del autor: El presente artículo se encuentra desactualizado. El lector puede encontrar una introducción más actual a la gestión de proyectos de C++ en VSCode en la serie de posts 'Integrando VSCode, Mingw-w64 y CMake' publicada en agosto de 2019 y revisada periódicamente desde esa fecha.

Visual Studio Code 

VSCode es un editor gratuito y de código abierto –si bien la descarga oficial se realiza bajo una licencia de software propietario– desarrollado desde 2015 por la compañía Microsoft para las plataformas Linux/MS Windows/macOS. Proporciona, entre otras funcionalidades, un alto grado de configuración por parte del usuario, resaltado de sintaxis, soporte para debugging, autocompleción e información de código (IntelliSense) y control integrado de Git. Fue declarado el entorno más popular entre desarrolladores en el Stack Overflow 2018 Developer Survey.

En este artículo, describiremos brevemente cómo configurar un proyecto de C++ en VSCode en el caso específico de MS Windows. Los pasos a dar en otros sistemas operativos serían análogos. Asumiremos que nuestro equipo dispone de un compilador mingw-w64 actualizado (con soporte para C++17) y que éste se encuentra incluido en el PATH del sistema.

Gestión de memoria (IX)

Como continuación de un post anterior de esta serie, en el que analizábamos la relevancia de la jerarquía de memoria en el rendimiento de nuestros procesos, vale la pena citar un segundo ejemplo analizado en numerosas publicaciones y foros de programación (ver referencias al final del artículo), consistente en la detección de los tamaños de las memorias caché a través de un buffer de memoria cuya longitud se incrementa paulatinamente. El resultado, por desgracia, suele diferir del esperado, por razones que discutiremos a continuación.