3 -listing template // funksiya shablonining parametr e’loni
T max1(T a, T b)
{
return (a > b) ? a : b;
}
Agar shablon parametrlarining bir nechta turlari kerak boʻlsa, ular vergul bilan ajratiladi:
template Agar bir nechta parametrlar mavjud boʻlsa, ular odatda T1, T2 yoki boshqa harflar bilan nomlanadi: T, S.
Eslatma: T turiga oʻtkaziladigan funksiya argumen-tining turi sinf boʻlishi mumkinligi sababli va sinflar odatda qiymat boʻyicha oʻtkazilishi tavsiya etilmaganligi sababli, funksiya shabloni parametrlari va qaytish qiymatini doimiy havolalar qilish yaxshiroqdir (4-listing)
4-listing template const T& max(const T& a, const T& b)
{
return (a > b) ? a : b;
}
Funksiya shablonlaridan foydalanish. Funksiya shablonlaridan foydalanish oddiy funksiyalardan foydalanishga oʻxshaydi (3.119-listing).
3.119-listing
#include using namespace std;
template const T& max(const T& a, const T& b)
{
return (a > b) ? a : b;
}
int main()
{
int i = max(4, 8);
cout << i << '\n';
double d = max(7.56, 21.434);
cout << d << '\n';
char ch = max('b', '9');
cout << ch << '\n';
return 0;
}
Natija:
8 21.434 b Funksiya shabloni nusxalari. C++ tili funksiya shablonlarini toʻgʻridan-toʻgʻri kompilyatsiya qilmaydi. Bu holatni amalda koʻrib chiqaylik. Birinchidan, funksiya shablonini yaratamiz (3.120-listing)
3.120-listing template // funksiya shablonining parametr e’loni
const T& max(const T& a, const T& b)
{
return (a > b) ? a : b;
}
Keyin funksiya shablonini chaqiramiz:
int i = max (4, 8); // max (int, int) chaqiriladi
Kompilyator ikkala raqam ham butun son ekanligini koʻradi, shuning uchun u funksiya shablonini koʻchiradi va max(int, int) shablonini yaratadi:
const int& max(const int &a, const int &b)
{
return (a > b) ? a : b;
}
Bu endi “oddiy funksiya”. Aytaylik, boshqa ma’lumotlar turi bilan max() funksiyasini qayta chaqirish kerak boʻlsa:
double d = max(7.58, 19.378); // max(double, double) chaqiriladi
C++ tili avtomatik ravishda shablonning max (double, double) nusxasini yaratadi:
const double& max(const double &a, const double &b)
{
return (a > b) ? a : b;
}
Shuni ham ta'kidlash joizki, agar funksiya shabloni yaratilsa, lekin nusxani chaqirilmasa, u shablon yaratilmaydi.