Sobes.tech
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:

  1. SFINAE (Substitution Failure Is Not An Error) — usando std::enable_if y 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
}
  1. 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
}
  1. 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.