Saltar al contenido
Logotipo de Trainontech Trainontech

Lenguajes y Fundamentos de Programación · LNG-152

C++ avanzado: plantillas, memoria y STL

Metaprogramación con plantillas, punteros inteligentes y algoritmos de la STL, con el rendimiento siempre medido.

Bajo demanda Especialización 8 módulos · 39 clases

Formato asíncrono Desarrollo, Ingeniería / Industria C++

Lo que aprenderás

  • Escribir plantillas de función y de clase con parámetros variádicos y deducción de tipos.
  • Restringir plantillas con conceptos de C++20 y obtener mensajes de error legibles.
  • Componer algoritmos de la STL y rangos en lugar de escribir bucles a mano.
  • Diseñar tipos que gestionan recursos con semántica de movimiento y garantías de excepción.
  • Analizar el efecto de la disposición de datos en caché y reorganizar estructuras para mejorarlo.
  • Medir alternativas con Google Benchmark y comprobar el código máquina generado por el compilador.

Contenido del curso

8 módulos · 39 clases en vídeo · práctica guiada en cada módulo

Módulo 1 · Presentación y método 4 clases
  • Qué se da por sabido en este curso
  • Preparar el proyecto: CMake, sanitizers y Google Benchmark
  • Cómo medir sin engañarse
  • Leer el ensamblador generado con explorador de compiladores
Módulo 2 · Plantillas de función y de clase 5 clases
  • Deducción de argumentos y parámetros por defecto
  • Plantillas variádicas y expansión de paquetes
  • Especialización total y parcial
  • SFINAE y su sustitución por conceptos
  • Plantillas de alias
Módulo 3 · Conceptos y programación genérica 5 clases
  • Definir un concepto propio
  • requires y restricciones compuestas
  • Mensajes de error antes y después
  • Rasgos de tipo de la biblioteca
  • if constexpr para ramas en tiempo de compilación
Módulo 4 · Tiempo de compilación 5 clases
  • constexpr y consteval
  • Cálculo en compilación con ejemplos útiles
  • Tablas generadas por el compilador
  • Coste de compilación: qué lo dispara
  • Unidades de traducción y compilación incremental
Módulo 5 · Gestión de recursos y excepciones 5 clases
  • Punteros inteligentes con borradores personalizados
  • Asignadores propios y polimórficos
  • Garantías básica, fuerte y sin excepciones
  • Semántica de movimiento en tipos propios
  • Copy elision y valores de retorno
Módulo 6 · STL y algoritmos 5 clases
  • Categorías de iterador y su efecto
  • Algoritmos de la biblioteca frente a bucles a mano
  • Rangos, vistas y evaluación perezosa
  • Algoritmos paralelos y políticas de ejecución
  • Contenedores asociativos y sus costes
Módulo 7 · Rendimiento y memoria 5 clases
  • Jerarquía de caché y localidad de datos
  • Estructura de arrays frente a array de estructuras
  • Evitar asignaciones en el camino caliente
  • Perfilado con perf y análisis de puntos calientes
  • Optimizaciones que el compilador ya hace
Módulo 8 · Caso práctico: biblioteca genérica de series temporales 5 clases
  • Interfaz pública y conceptos que la restringen
  • Implementación con contenedor contiguo
  • Batería de pruebas y comprobaciones en compilación
  • Mediciones antes y después de cada cambio
  • Entrega: biblioteca de cabecera documentada

Requisitos

  • C++ moderno a nivel intermedio: clases, RAII, referencias rvalue y contenedores estándar.
  • Compilador con soporte de C++20 (g++ 12 o clang 15 en adelante) y CMake instalados.
  • Soltura con la línea de comandos y con un depurador.

Descripción

En un proyecto C++ grande, el coste no está en escribir clases sino en las decisiones que se repiten un millón de veces por segundo: una copia de más, una indirección innecesaria, un contenedor que provoca fallos de caché. A la vez, la parte genérica del código se llena de plantillas que compilan mal y producen errores de varias pantallas que nadie sabe leer.

Este curso entra en esas dos zonas. Por un lado, metaprogramación con plantillas hasta conceptos y restricciones, con ejemplos de bibliotecas reales. Por otro, rendimiento medido: perfilado, disposición de datos en memoria, evitación de asignaciones y comprobación del ensamblador generado. Cada afirmación sobre velocidad se acompaña de una medición reproducible con Google Benchmark.

Al terminar se puede diseñar una biblioteca genérica que otros usen sin sufrir, y defender con números una decisión de rendimiento ante el equipo. Es el nivel que se espera en desarrollo de motores, procesamiento de señal, simulación numérica y sistemas de baja latencia, donde C++ se elige precisamente por el control que ofrece.

¿Para quién es este curso?

  • Desarrolladores C++ con experiencia que mantienen bibliotecas usadas por otros equipos.
  • Ingeniería de simulación o de procesado de señal con requisitos estrictos de latencia.
  • Programadores de sistemas que necesitan justificar con mediciones cada decisión de diseño.
Bajo demanda

Curso diseñado con la ficha cerrada. Se produce al confirmarse un grupo o un contrato.

Código
LNG-152
Nivel
Especialización
Público
Desarrollo, Ingeniería / Industria
Entorno
C++

Este curso incluye

  • 39 clases en vídeo bajo demanda
  • Práctica en entornos web y simuladores, sin instalar nada
  • Tutorización en el campus
  • Acceso desde móvil, tableta y ordenador
  • Actualizaciones cuando cambia la versión de la herramienta
  • Certificado de finalización

Sigue aprendiendo

Cursos relacionados

Bajo demanda

LNG-301Lenguajes y Fundamentos de Programación

Algoritmos avanzados y complejidad

Programación dinámica, algoritmos voraces, grafos ponderados y análisis asintótico con medición real.

PythonJupyterLab

Especialización 37 clases

Próximamente

LNG-304Lenguajes y Fundamentos de Programación

Concurrencia y paralelismo comparados

Hilos, corrutinas, actores y canales: qué modelo elige cada lenguaje y por qué.

PythonGoRust+1

Especialización 35 clases