C++ Templates: introducción y trucos para game developers
Channel: Profesor Retroman
Date: 2022-01-20

==== Sesión 7 - 19/ene/2022 === [ Curso: https://bit.ly/CPPGameDev-2021-Curso ]
Nos centramos en ver qué son y cómo usar las templates para realizar cálculos en tiempo de compilación. Vemos sus principales ventajas: (1) evitar calcular cosas constantes en tiempo de ejecución y (2) ganar en flexibilidad, mantenibilidad y expresividad en nuestro código.
 
A través de ejemplos básicos de programación de motores de videojuego (Game Engine), vemos cómo podemos utilizar los distintos tipos de templates, sus funcionalidades y sus detallitos. En concreto, veremos:
 - Overload sets (Conjuntos sobrecargados de funciones por tipo)
 - Function templates (Plantillas de función para generar overload sets automáticamente)
 - Class templates (Plantillas de clase/struct para generar nuevos tipos de datos automáticamente)
 - Complete / Partial Specialization (Especialización de las plantillas de clase para tipos concreto, viendo casos de especialización parcial y completa)
 - Variadic Templates (Plantillas variádicas, o con un número de argumentos variable)

Todo esto será una pequeña introducción a templates con la que daremos el primer paso para luego llegar a nuestro destino final: template metaprogramming (metaprogramación con templates) que utilizaremos para crear nuestros motores de videojuego configurables para distintos tipos de usuario, de manera automatizada.

=== Contenidos ===
00:00:00 Introducción y presentación
00:01:27 Templates C++ : Resumen, objetivos y contenidos
00:03:31 Templates C++ : Para qué sirven
00:06:40 C++ : Ejemplo básico con herencia
00:18:06 Problemas : coste computacional y flexibilidad
00:21:13 Sobrecarga : Overloads sets y tag dispatch
00:28:28 Function templates (Plantillas de función)
00:41:28 Diagrama explicativo : instanciación de plantillas, compile-time y run-time
00:48:24 Especialización completa de plantillas de función
00:58:24 Diferencia entre especialización y sobrecarga de función
01:02:10 Non-type template parameters : ejemplo
01:09:15 Tipos como parámetros, type_traits, std::is_same, if constexpr
01:17:21 static_assert : verificar en tiempo de compilación
01:26:22 Class templates: ejemplo Entity / Components
01:43:40 Class templates: Problemas de Entity / Components
01:46:35 Class templates: plantilla de clase Entity
01:50:20 member function templates: función hasComponent
01:56:40 Template vs Type: Pasar plantillas como parámetros
02:07:25 member function templates: función getComponent
02:12:50 Instanciación de templates: sólo al ser usadas
02:24:00 Partial Classs Specialization : Especialización parcial
02:29:46 Default template parameters
02:37:00 C++20 auto function parameter (Sintaxis de template simplificada)
02:41:54 Variadic templates: ejemplo Entity / Tags
02:51:17 Tipos especializados como contenedores de tipos
03:00:00 static member function template: Tags::has
03:13:30 Variadic templates y Fold Expressions
03:22:45 Despedida y contenidos de próxima sesión (Metaprogramación)
03:25:15 Libro recomendado "C++ Templates: The complete Guide. 2nd edition"

Clase de la asignatura Videojuegos 1
Grado en Ingeniería Multimedia.
Universidad de Alicante.

Licensed Assets
 - Saboteur 2 (The Synthwave EP) / McKlain (https://mcklain.bandcamp.com/track/saboteur-2)
 - - Original version by Rob Hubbard / Durell Software
 - La Guerra de Gamber - Menu Theme / McKlain (https://mcklain.bandcamp.com/track/la-guerra-de-gamber-menu-theme)

#GameDev #Templates #CPP #Programming #IndieDev #Programación