0Pricing
C++ Academy · Lección

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

  1. Por qué usar concepts frente a SFINAE
  2. Definición de concepts con requires
  3. Uso de concepts en plantillas y auto
  4. Concepts estándar habituales: integral y ranges
← Volver a C++ Academy