الانتقال إلى المحتوى الرئيسي
الوحدة 8 · الدرس 1 من 217/18 في الدورة~12 min
دروس الوحدة (1/2)

قوالب الوظائف

القوالب تسمح بكتابة تعليمات برمجية عامة بلغة C++. من خلال القوالب، يمكننا تحديد الوظائف أو الفئات التي تعمل على معلمات النوع العامة، مما يسمح للمترجم بإنشاء الكود الفعلي للأنواع المحددة المطلوبة.

تحديد قالب الوظيفة

لتعريف قالب دالة، نسبق تعريف الدالة بالكلمة الأساسية template، متبوعة بقائمة معلمات النوع المحاطة بأقواس زاوية <>. بشكل عام، يتم استخدام typename أو class للإعلان عن نوع عام.

C++
// T is the generic type parameter
template <typename T>
T add(T a, T b) {
    return a + b;
}

استدعاء الوظيفة وخصم وسيطة القالب

عندما نستدعي الدالة، يمكننا تحديد النوع بوضوح بين قوسين زاوية:

C++
int res1 = add<int>(5, 10);
double res2 = add<double>(3.14, 2.71);

ومع ذلك، عادة ما يكون مترجم C++ قادرًا على استنتاج النوع تلقائيًا من معلمات الإدخال التي تم تمريرها (خصم وسيطة القالب):

C++
int res1 = add(5, 10); // The compiler deduces that T is int

جربه بنفسك

تمرين#cpp.m8.l1.e1
المحاولات: 0جارٍ التحميل…

حدد قالب دالة باسم myMax يأخذ معلمتين من النوع العام T ويعيد المعلمة الأكبر منهما.

جارٍ تحميل المحرر…
إظهار التلميح

ابدأ بكتابة "قالب <typename T>" متبوعًا بالتوقيع "T myMax(T a, T b)".

الحل متاح بعد 3 من المحاولات

تمرين#cpp.m8.l1.e2
المحاولات: 0جارٍ التحميل…

اكتب قالب دالة باسم printPair يأخذ معلمتين من أنواع عامة مختلفة T1 وT2 ويطبع الوسيطتين مفصولتين بمسافة باستخدام std::cout.

جارٍ تحميل المحرر…
إظهار التلميح

يجب أن يحدد إعلان القالب معلمتين: `template <typename T1, typename T2>`.

الحل متاح بعد 3 من المحاولات