Definición de concepts con requires
Defina concepts personalizados mediante expresiones requires y restricciones.
Definición de concepts con requires es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
La palabra clave concept
Declare un concepto con template <params> concept Name = expression;. La expresión debe ser un booleano evaluado en tiempo de compilación.
template <typename T>
concept Integer = std::is_integral_v<T>;Combinar traits de tipos
Utilice operadores lógicos para combinar traits en un concepto.
template <typename T>
concept SignedInteger = std::is_integral_v<T> && std::is_signed_v<T>;La expresión requires
Una forma más expresiva: enumere las operaciones que el tipo debe admitir.
template <typename T>
concept Addable = requires(T a, T b) {
a + b;
};Requisitos compuestos
Dentro de requires, puede especificar el tipo de resultado y restricciones adicionales.
template <typename T>
concept Number = requires(T a, T b) {
{ a + b } -> std::convertible_to<T>;
{ a * b } -> std::convertible_to<T>;
};Requisitos anidados
Añada requires dentro de una expresión requires para incorporar conceptos con nombre.
template <typename T>
concept Sortable = requires(T t) {
{ t.begin() };
{ t.end() };
requires std::movable<typename T::value_type>;
};Requisitos de tipo
Puede exigir que un tipo tenga determinados tipos anidados o alias.
template <typename T>
concept HasValueType = requires {
typename T::value_type;
};Usar conceptos en plantillas
Tres sintaxis:
// 1. Replace typename
template <Integer T>
T increment(T x) { return x + 1; }
// 2. requires after template parameters
template <typename T>
requires Integer<T>
T increment(T x) { return x + 1; }
// 3. requires after function signature
template <typename T>
T increment(T x) requires Integer<T> {
return x + 1;
}Conceptos y parámetros auto
Las plantillas de función abreviadas también pueden tener restricciones.
void process(Integer auto x) { std::cout << x; }Restricciones múltiples
Combine conceptos con && y ||.
template <std::integral T, std::integral U>
requires (sizeof(T) >= sizeof(U))
T promote(U value) { return static_cast<T>(value); }Convenciones de nomenclatura
La mayoría del código usa CamelCase para los conceptos. Algunas bibliotecas usan minúsculas, siguiendo la convención de la biblioteca estándar. Elija una convención y manténgala.
Conceptos en plantillas de clase
Aplique restricciones a las plantillas de clase de la misma forma.
template <std::integral T>
class Counter { T value_; /* ... */ };Conceptos reutilizables
Defina una biblioteca de conceptos pequeños y combínelos. Los conceptos reutilizables hacen que las plantillas se documenten por sí mismas y sean fáciles de mantener.
Comprobación rápida
¿Qué sintaxis dentro de una expresión requires comprueba que el resultado de a + b se pueda convertir a T?
Resumen
Defina conceptos con concept Name = expression. Utilice expresiones requires para restricciones basadas en operaciones, con requisitos compuestos, anidados y de tipo. Combine conceptos con && y || para expresar restricciones complejas.
Preguntas frecuentes
¿La lección «Definición de concepts con requires» es gratis?
Sí — el texto completo de «Definición de concepts con requires» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Definición de concepts con requires»?
Defina concepts personalizados mediante expresiones requires y restricciones. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Definición de concepts con requires»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Por qué usar concepts frente a SFINAE
- Definición de concepts con requires
- Uso de concepts en plantillas y auto
- Concepts estándar habituales: integral y ranges