De 0 a 100 (Taller): metaprogramación con plantillas en C++ moderno (I)

This is a past event

38 people went

Location image of event venue

Details

¿Sabes que es la metaprogramación?¿Quieres aprender metaprogramación en C++ y ademas en C++11/14? Este es tu taller!

En este primer acercamiento a la metaprogramación con plantillas en C++ Manuel Sánchez (https://twitter.com/Manu343726) nos enseñará:

• La Metaprogramación es el proceso de escribir código para generar el código, es decir, la generación automática de código.

• En la metaprogramación con plantillas en C++ se utiliza el sistema de plantillas para generar los tipos y el código en el proceso: Generamos los tipos utilizando plantillas, y usamos esos tipos para hacer cálculos o para generar el código que queremos.

• La unidad básica de metaprogramación es la metafunción, como en la programación común la unidad básica es la función. Las metafunciones manipulan entidades de su dominio de metaprogramación específico. En metaprogramación con plantillas en C++, esas entidades son tipos, y las metafunciones se representan a través de plantillas.

• La metaprogramación con plantillas en C++ es como un lenguaje funcional embebido en C++. Este "lenguaje" no tiene influencia sobre el lenguaje (No podemos modificar un tipo existente, sólo crear otros nuevos), por lo que se utilizan los mismo patrones que en lenguajes funcionales como Haskell o F#.

El taller se dividirá en las siguientes partes:

1. Introducción:

1.1. ¿Metaprogramación?
1.2. Metaprogramación en C++: El sistema de tipos como generador de código
1.3. Repaso rápido templates

1.3.1. type vs value vs template-template parameters
1.3.2. Especialización. Pattern matching
1.3.3. SFINAE. std::enable_if

2. Conceptos básicos:

2.1. Metafunciones.
2.2. Boxing. std::integral_constant
2.3. Evaluación de metafunciones. Ejemplos prácticos
2.4. Instanciación vs “ejecución”: La abstracción “evaluación”[^1]

3. C++11:

3.1. Template aliases: No más typename ::type
3.2. Variadic templates: Como ser completamente genérico.
3.3. constexpr classes: Objetos evaluables en tiempo de compilación.
3.4. Bonus: C++14 variable templates como sustitutos de struct y template aliases.