استخدام Concepts في القوالب وauto
قيّد قوالب الدوال وقوالب الدوال المختصرة باستخدام Concepts.
استخدام Concepts في القوالب وauto درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
مراجعة الصيغ الثلاث
يمكنك تطبيق مفهوم بثلاث طرق: كبادئة لمعلمة قالب، أو كعبارة requires، أو باستخدام صيغة قالب الدالة المختصرة.
صيغة البادئة
استبدل typename باسم المفهوم.
template <std::integral T>
T add(T a, T b) { return a + b; }صيغة عبارة requires
أضف requires بعد قائمة معلمات القالب. وهي الأكثر مرونة، إذ تدعم الشروط المعقدة.
template <typename T>
requires std::integral<T> || std::floating_point<T>
T add(T a, T b) { return a + b; }عبارة requires اللاحقة
ضع requires بعد توقيع الدالة، وهذا مفيد في الدوال العضو عندما يعتمد القيد على المعلمات.
template <typename T>
class Container {
public:
void sort() requires std::sortable<T> { /* ... */ }
};قوالب الدوال المختصرة
استخدم auto في المعلمات وقيّده. ينشئ المصرّف القالب ضمنيًا.
void greet(std::convertible_to<std::string> auto name) {
std::cout << "Hello " << name;
}معلمات auto متعددة
يمكن أن يكون لكل auto مفهومه الخاص. ينشئ كل auto معلمة قالب مستقلة.
auto multiply(std::integral auto a, std::integral auto b) {
return a * b;
}المفاهيم مع قوالب الأصناف
تنطبق الصيغ الثلاث نفسها.
template <std::movable T>
class Buffer { /* ... */ };
template <typename T>
requires std::default_initializable<T>
class Storage { /* ... */ };لامبدا مقيّدة (C++20)
يمكن أن تحتوي لامبدا على معلمات قالب صريحة مع مفاهيم.
auto print = []<std::integral T>(T x) {
std::cout << x << " is integral";
};
print(42);حل التحميل الزائد القائم على المفاهيم
يختار المصرّف التحميل الزائد الأكثر تقييدًا من بين ما يطابق. وتتفوق المفاهيم الأكثر تخصيصًا على الأقل تخصيصًا.
void process(std::integral auto x) { std::cout << "int\n"; }
void process(std::signed_integral auto x) { std::cout << "signed\n"; }
process(42); // calls signed_integral versionالدوال العضو المقيّدة
يمكن أن تكون لأعضاء قالب الصنف قيودهم الخاصة.
template <typename T>
class Optional {
T value_;
public:
void clear() requires std::is_trivially_destructible_v<T> { /* fast */ }
void clear() { /* general */ }
};الأنواع المقيّدة ذات التهيئة الافتراضية
ادمج requires مع القيم الافتراضية لكتابة قوالب واضحة تكشف عن الغرض منها.
دليل الأسلوب
استخدم صيغة البادئة في الحالات الشائعة. وانتقل إلى requires عندما تكون القيود معقدة أو تتضمن أنواعًا متعددة. واستخدم قوالب الدوال المختصرة للدوال القصيرة والمركّزة.
تحقق سريع
ما صيغة قالب الدالة المختصرة لدالة تستقبل أي قيمة صحيحة؟
مراجعة
طبّق المفاهيم كبوادئ، أو في عبارات requires، أو في قوالب الدوال المختصرة. يفوز التحميل الزائد المطابق والأكثر تقييدًا. استخدم أنظف صيغة تلائم الحالة: البادئة للقيود البسيطة، وrequires للمعقدة، والصيغة المختصرة للدوال القصيرة.
تعلم C++ مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 51
- الدروس
- 203
الأسئلة الشائعة
هل درس «استخدام Concepts في القوالب وauto» مجاني؟
نعم — نص درس «استخدام Concepts في القوالب وauto» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «استخدام Concepts في القوالب وauto»؟
قيّد قوالب الدوال وقوالب الدوال المختصرة باستخدام Concepts. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «استخدام Concepts في القوالب وauto»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا نستخدم Concepts بدلًا من SFINAE
- تعريف Concepts باستخدام requires
- استخدام Concepts في القوالب وauto
- المفاهيم القياسية الشائعة: Integral وRanges