Última actualización:2026-10-12
Deducción con auto en plantillas de C++17¶
En C++ todo puede ser auto¶
C++17 introdujo numerosas funciones pensadas para aumentar la expresividad del código y reducir la redundancia en las plantillas. Una de las mejoras más notables es la capacidad de declarar parámetros de plantilla no tipo con la palabra clave auto. En ciertos escenarios esta característica resulta especialmente cómoda, ya que elimina la necesidad de declarar tipos de forma explícita. A continuación contaré cómo uso esta característica en mi trabajo, es decir, en el ámbito de las bases de datos.
Se aprende desde la práctica: el código fuente completo de esta sección se subirá al Planeta; si te interesa, escanea el código QR al final de la página.
Parámetros de plantilla no tipo con auto en C++17¶
Ordenación en un escenario de base de datos¶
Considera una clase Foo relacionada con bases de datos que quieres ordenar según un orden concreto representado por una enumeración:
Tienes instancias de Foo con distintos órdenes de clasificación:
La forma anterior de implementarlo¶
Antes de C++17, probablemente lo implementaríamos así:
Sin embargo, esto puede provocar errores, porque el compilador no puede deducir el parámetro de plantilla 'U'.
La forma simplificada actual¶
A partir de C++17, para los parámetros de plantilla no tipo podemos usar la palabra clave auto como sustituto:
Esta forma es más sencilla y nos permite usar parámetros de plantilla no tipo sin especificar el tipo explícitamente.
Simplificación de integral_constant¶
Antes podríamos implementar integral_constant de la siguiente manera:
Y ahora basta con:
Esta simplificación hace que el código sea más claro y legible.
Conclusión¶
El uso de la palabra clave auto introducido en C++17 para declarar parámetros de plantilla no tipo simplifica enormemente el código de plantillas. Al eliminar las tediosas declaraciones de tipos, podemos expresar la intención del código de forma más intuitiva y mejorar su legibilidad y mantenibilidad. En escenarios como la ordenación, esta característica resulta especialmente útil: nos permite concentrarnos en la esencia del problema y no en los detalles de los parámetros de plantilla.
Temas relacionados¶
- C++17: el atributo [[nodiscard]] | C++那些事
- C++17 std::string_view | C++那些事
- Recursos de memoria PMR en C++17 | C++那些事
- Diecisiete características avanzadas de C++17 | C++那些事
- Deducción de argumentos de plantilla de clase CTAD en C++17 | C++那些事
- C++17 optional_ref | C++那些事
- C++17 std::variant | C++那些事
- Vinculaciones estructuradas en C++17 | C++那些事
- Plantillas de variable en C++17 | C++那些事