0Pricing
C++ Academy · درس

تعريف Concepts باستخدام requires

عرّف Concepts مخصّصة باستخدام تعبيرات requires والقيود.

تعريف Concepts باستخدام requires درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

الكلمة المفتاحية concept

صرّح عن مفهوم باستخدام template <params> concept Name = expression; ويجب أن يكون التعبير قيمة منطقية تُحسم وقت الترجمة.

template <typename T>
concept Integer = std::is_integral_v<T>;

دمج سمات الأنواع

استخدم العوامل المنطقية لدمج السمات في مفهوم واحد.

template <typename T>
concept SignedInteger = std::is_integral_v<T> && std::is_signed_v<T>;

تعبير requires

صيغة أكثر تعبيرًا: اذكر العمليات التي يجب أن يدعمها النوع.

template <typename T>
concept Addable = requires(T a, T b) {
    a + b;
};

المتطلبات المركبة

داخل requires، يمكنك تحديد نوع النتيجة وقيود إضافية.

template <typename T>
concept Number = requires(T a, T b) {
    { a + b } -> std::convertible_to<T>;
    { a * b } -> std::convertible_to<T>;
};

المتطلبات المتداخلة

أضف requires داخل تعبير requires لإدراج المفاهيم المسمّاة.

template <typename T>
concept Sortable = requires(T t) {
    { t.begin() };
    { t.end() };
    requires std::movable<typename T::value_type>;
};

متطلبات النوع

يمكنك اشتراط أن يحتوي النوع على أنواع أو أسماء مستعارة متداخلة معيّنة.

template <typename T>
concept HasValueType = requires {
    typename T::value_type;
};

استخدام المفاهيم في القوالب

ثلاث صيغ:

// 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;
}

المفاهيم ومعلمات auto

يمكن أيضًا تقييد قوالب الدوال المختصرة.

void process(Integer auto x) { std::cout << x; }

قيود متعددة

ادمج المفاهيم باستخدام && و||.

template <std::integral T, std::integral U>
    requires (sizeof(T) >= sizeof(U))
T promote(U value) { return static_cast<T>(value); }

اصطلاحات التسمية

تستخدم معظم الشيفرات صيغة CamelCase للمفاهيم. وتستخدم بعض المكتبات أسماءً بأحرف صغيرة، بما يتوافق مع المكتبة القياسية. اختر اصطلاحًا والتزم به.

المفاهيم في قوالب الأصناف

قيّد قوالب الأصناف بالطريقة نفسها.

template <std::integral T>
class Counter { T value_; /* ... */ };

مفاهيم قابلة لإعادة الاستخدام

عرّف مكتبة من المفاهيم الصغيرة وركّبها معًا. تجعل المفاهيم القابلة لإعادة الاستخدام القوالب موضِّحةً لنفسها وسهلة الصيانة.

تحقق سريع

أي صيغة داخل تعبير requires تتحقق من أن نتيجة a + b قابلة للتحويل إلى T؟

مراجعة

عرّف المفاهيم باستخدام concept Name = expression. استخدم تعبيرات requires لفرض قيود قائمة على العمليات، مع المتطلبات المركبة والمتداخلة ومتطلبات النوع. ادمج المفاهيم باستخدام && و|| للتعبير عن قيود غنية.

الأسئلة الشائعة

هل درس «تعريف Concepts باستخدام requires» مجاني؟

نعم — نص درس «تعريف Concepts باستخدام requires» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «تعريف Concepts باستخدام requires»؟

عرّف Concepts مخصّصة باستخدام تعبيرات requires والقيود. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «تعريف Concepts باستخدام requires»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا نستخدم Concepts بدلًا من SFINAE
  2. تعريف Concepts باستخدام requires
  3. استخدام Concepts في القوالب وauto
  4. المفاهيم القياسية الشائعة: Integral وRanges
← العودة إلى C++ Academy