Junior — Middle
¿Cómo se pueden establecer restricciones en los tipos en los parámetros de plantilla en C++?
sobes.tech AI
Respuesta de la IA
En C++, las restricciones en los tipos en los parámetros de plantillas se pueden establecer de varias maneras:
- SFINAE (Substitution Failure Is Not An Error) — usando
std::enable_ify otras meta-funciones de<type_traits>, se pueden incluir o excluir funciones o clases plantilla según las propiedades de los tipos.
#include <type_traits>
template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
void foo(T value) {
// Implementación para tipos enteros
}
int main() {
foo(10); // OK, int es entero
// foo(3.14); // Error de compilación, double no es adecuado
}
- Conceptos (Concepts) — desde C++20, se pueden usar conceptos para restricciones de tipos más legibles y declarativas.
#include <concepts>
template<std::integral T>
void foo(T value) {
// Implementación para tipos enteros
}
- Afirmaciones estáticas (
static_assert) — dentro de una plantilla, se puede verificar las propiedades del tipo y generar un error de compilación con un mensaje.
#include <type_traits>
template<typename T>
void foo(T value) {
static_assert(std::is_integral_v<T>, "T debe ser un tipo entero");
// ...
}
De esta manera, las restricciones ayudan a hacer las plantillas más seguras y comprensibles.