0Pricing
C++ Academy · درس

مراجعة قوالب الدوال والأصناف

اكتب دوال وأصنافًا عامة باستخدام صياغة القوالب الصحيحة.

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

لماذا القوالب؟

تتيح لك القوالب كتابة الشيفرة مرة واحدة، ثم تجعل المترجم ينشئ إصدارات محددة لكل نوع يُستخدم. وهي حجر الأساس في البرمجة العامة.

صياغة قالب الدالة

صرّح بمعاملات الأنواع باستخدام template <typename T>. استخدم T في توقيع الدالة.

template <typename T>
T max_of(T a, T b) {
    return (a > b) ? a : b;
}

std::cout << max_of(3, 7);          // int
std::cout << max_of(2.5, 1.5);      // double

typename مقابل class

الكلمتان المفتاحيتان typename وclass متكافئتان في تصريحات معاملات القوالب. وتُعد typename الأكثر شيوعًا في الأسلوب الحديث.

معاملات أنواع متعددة

يمكن أن تحتوي القوالب على معاملات أنواع متعددة.

template <typename T, typename U>
auto combine(T a, U b) -> decltype(a + b) {
    return a + b;
}

المعاملات غير النوعية

يمكن أن تكون معاملات القوالب أيضًا قيمًا غير نوعية، مثل الأعداد الصحيحة والتعدادات والمؤشرات.

template <typename T, size_t N>
struct StaticArray {
    T data[N];
};

StaticArray<int, 10> arr;

قوالب الأصناف

تستخدم الأصناف العامة صياغة القوالب نفسها. استخدم معامل النوع مع الأعضاء والدوال.

template <typename T>
class Stack {
    std::vector<T> data_;
public:
    void push(T x) { data_.push_back(std::move(x)); }
    T pop()        { T t = std::move(data_.back()); data_.pop_back(); return t; }
};

Stack<int> s1;
Stack<std::string> s2;

دوال الأعضاء خارج الصنف

تحتاج التعريفات الموجودة خارج الصنف إلى بادئة القالب مع كل عضو.

template <typename T>
class Stack {
public:
    void push(T x);
};

template <typename T>
void Stack<T>::push(T x) {
    data_.push_back(std::move(x));
}

المعاملات الافتراضية للقوالب

تشبه المعاملات الافتراضية للدوال. وتُستخدم عندما لا يحدد المستدعي قيمة لها.

template <typename T = int>
class Box {
    T value;
};

Box<> b;       // T is int

استنتاج معاملات القالب

غالبًا ما يستنتج المترجم معاملات القالب من الاستدعاء.

template <typename T>
void print(T x) { std::cout << x; }

print(42);          // T deduced as int
print("hello");    // T deduced as const char*
print<double>(3);   // explicit

استنتاج معاملات قالب الصنف (C++17)

يتيح C++17 حذف معاملات قالب الصنف عندما يمكن استنتاجها من الباني.

std::pair p(1, 2.5);            // pair<int, double>
std::vector v{1, 2, 3};         // vector<int>

البحث على مرحلتين

تخضع القوالب للبحث على مرحلتين — أثناء التعريف (للأسماء غير المعتمدة) وأثناء إنشاء النسخة (للأسماء المعتمدة). ويساعد ذلك على اكتشاف العديد من الأخطاء وقت التعريف.

رسائل الأخطاء

قد تبدو أخطاء القوالب مخيفة. اقرأها من الأسفل إلى الأعلى، وركّز على موضع المصدر، واستخدم مفاهيم C++20 لتحسين التشخيص.

تحقق سريع

ما الميزة التي تتيح تجميع std::vector v{1, 2, 3}; من دون تحديد std::vector<int>؟

ملخص

تنشئ القوالب شيفرة خاصة بكل نوع وقت الترجمة. عرّف قوالب الدوال والأصناف باستخدام template <typename T>. يستنتج المترجم المعاملات متى أمكن ذلك — وحددها صراحةً عند الحاجة.

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

هل درس «مراجعة قوالب الدوال والأصناف» مجاني؟

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

ماذا ستتعلم في «مراجعة قوالب الدوال والأصناف»؟

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

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

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

كم من الوقت يستغرق درس «مراجعة قوالب الدوال والأصناف»؟

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

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

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

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

  1. مراجعة قوالب الدوال والأصناف
  2. تخصيص القوالب الجزئي والكامل
  3. القوالب متغيرة المعاملات وحزم المعاملات
  4. دوال constexpr وif constexpr
← العودة إلى C++ Academy